سؤال

لدي نوع من الشيء الغريب الذي أقوم به حقًا لتشكيل النص الخاص بي. لا تسألني من فضلك لماذا فعلت هذا الشيء الغريب! ؛-)

لذلك ، يستبدل البرنامج النصي PHP جميع طيات الخط " n" مع أحد الرمز speacial مثل "|". عندما أقوم بإدراج بيانات النص إلى قاعدة البيانات ، يستبدل البرنامج النصي PHP جميع طيات الأسطر بالرمز "|" وعندما يقرأ البرنامج النصي البيانات النصية من قاعدة البيانات ، فإنه يحل محل جميع الرموز الخاصة "|" مع طي خط " n".

أرغب في تقييد تنسيق النص بالطريقة التي سيتم بها قطع طيات الخط إذا كان هناك أكثر من طية خطين تستخدم في كل نصوص منفصلة.

فيما يلي مثال النص الذي أريد تنسيق البرنامج النصي:

this is text... this is text... this is text...this is text...this is text... this is text... this is text... this is text... this is text... this is text...

this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text...

أريد إعادة تنسيق مثل:

this is text... this is text... this is text...this is text...this is text... this is text... this is text... this is text... this is text... this is text...



this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text...

لذلك ، في المثال الأول ، لا يوجد سوى سطر واحد قابل للطي بين نصين ، وعلى المثال الثاني ، هناك 3 خطى بين نصين.

كيف يمكن أن يكون من الممكن استبدال أكثر من 2 رموز طية خط "|" إذا تم اكتشافها على النص؟

هذا نوع من الأمثلة أريد أن يفعل البرنامج النصي:

    $text = str_replace("|||", "||", $text);
    $text = str_replace("||||", "||", $text);
    $text = str_replace("|||||", "||", $text);
    $text = str_replace("||||||", "||", $text);
    $text = str_replace("|||||||", "||", $text);
    ...
    $text = str_replace("||||||||||", "||", $text);

    $text = str_replace("|", "<br>", $text);

HM ، لدي مشاكل! هذا لا يعمل عند إرسال البيانات النصية في طريقة النشر. انظر إلى هذا:

//REPLACING ALL LINE FOLDINGS WITH SPECIAL SYMBOL
$_POST["text"] = str_replace("\n","|",$_POST["text"]);
// REMOVING ALL LINE FOLDINGS
$_POST["text"] = trim($_POST["text"]);
// IF THERE ARE MORE THAN 3 LINE HOLDINGS - FORMAT TO 1 LINE HOLDING
$_POST["text"] = preg_replace("/\|{3,}/", "||", $_POST["text"]);
echo $_POST["text"];

فيما يلي النص الذي أدخله على Textarea وبعد str_replace ، يظهر هذا:

This is text 1. This is text 1. This is text 1. This is text 1. This is text 1. This is text 1. This is text 1. | | |This is text 2. This is text 2. This is text 2. This is text 2. This is text 2. This is text 2. This is text 2. | | | |This is text 3. This is text 3. This is text 3. This is text 3. This is text 3.

ها هو رمز PHP و HTML الخاص بي:

<?
//REPLACING ALL LINE FOLDINGS WITH SPECIAL SYMBOL
$_POST["text"] = str_replace("\n","|",$_POST["text"]);

echo "1) ".$_POST["text"]."<br><br>";

// REMOVING ALL LINE FOLDINGS
$_POST["text"] = trim($_POST["text"]);
// IF THERE ARE MORE THAN 3 LINE HOLDINGS - FORMAT TO 1 LINE HOLDING
$_POST["text"] = preg_replace("/\|{3,}/", "||", $_POST["text"]);

echo "2) ".$_POST["text"]."<br><br>";
?>
<html>

<head>
<title>No title</title>
<meta name="generator" content="Namo WebEditor v5.0">
</head>

<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="form1" method="post" action="test.php">
    <p><textarea name="text" rows="8" cols="55"></textarea></p>
    <p><input type="submit" name="formbutton1"></p>
</form>
<p>&nbsp;</p>
</body>

</html>
هل كانت مفيدة؟

المحلول

يبدو أنه مكان جيد لاستخدام تعبير منتظم:

$text = preg_replace('/\|{3,}/', '||', $text);

باللغة الإنجليزية: "استبدل 3 أو أكثر | الشخصيات مع ||"

نصائح أخرى

function clean($content) {
    $content = str_replace("||","|",$content);
    if (stripos("||",$content) !== false) {
        $content = clean($content);
    }

    return $content;
}

$text = clean($text);

شيء مثل وظيفة الحلقة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top