سؤال

لدي نظام تم إعداده للمستخدمين لإرسال مقالاتهم إلى قاعدة البيانات الخاصة بي.نظرًا لأنه سيكون مجرد HTML، فلا أريد أن أتوقع منهم أن يعرفوا كيفية الكتابة <br /> في كل مرة يكون هناك سطر جديد، لذلك أستخدم وظيفة PHP nl2br() على الإدخال.

أقوم أيضًا بتوفير أداة لتعديل المقالات، والتي ستعيد مقالاتهم إلى النموذج (ومع ذلك، فهذه صفحة مختلفة) وتسمح لهم بتحريرها.في القيام بذلك، <br /> كانت العناصر تظهر أيضًا (مع استمرار ظهور الخطوط الجديدة).لعلاج
العناصر التي تظهر (والتي كنت أتوقعها، على أي حال) أضفتها preg_replace('/<br(\s+)?\/?>/i', "\n", mysql_result($result,$i,"content")) الذي وجدته في سؤال آخر على هذا الموقع.يقوم بمهمة إزالة <br /> العناصر، ولكن نظرًا لأنه يتم استبدالها بأسطر جديدة، وكانت الأسطر الجديدة ستظل في الأصل على أي حال، في كل مرة يتم فيها تحرير المنشور، ستتم إضافة المزيد والمزيد من الأسطر الجديدة، مما يؤدي إلى تباعد الفقرات أكثر فأكثر في كل مرة.وهذا شيء لن يفهمه المستخدم.

على سبيل المثال، لنفترض أنني أدخلت ما يلي في نموذج إرسال المقالة:

 Hello, this is my article.
 I am demonstrating a new line here.

سيتم تحويل هذا إلى:

Hello, this is my article.<br />
I am demonstrating a new line here.

لاحظ أنه على الرغم من تحويل حرف السطر الجديد، إلا أنه لا يزال هناك سطر جديد في النص.في صيغة التحرير، <br /> سيتم تحويله مرة أخرى إلى السطر الجديد وسيبدو كما يلي:

Hello, this is my article.

I am demonstrating a new line here.

بسبب ال <br /> تم تحويله إلى سطر جديد، ولكن كان هناك بالفعل سطر جديد.لذلك أعتقد أن ما أتوقعه هو أن يتم تحويله في الأصل إلى شيء مثل هذا:

Hello, this is my article.<br />I am demonstrating a new line here.

انا اتسائل ...هل هناك طريقة لوقف nl2br() وظيفة من الحفاظ على الخطوط الجديدة الأصلية؟قد يكون لها علاقة مع ويندوز \r\n شخصية؟

هل كانت مفيدة؟

المحلول

الوظيفة التي تستخدمها، nl2br يتم استخدامه لإدخالها، ولكن ليس لاستبدالها.إذا كنت تريد استبدال \n مع <br /> تحتاج فقط إلى استخدام str_replace.مثل ذلك:

$string = str_replace("\n","<br />",$string);

ليست هناك حاجة على الإطلاق إلى regex في هذه الحالة.

نصائح أخرى

يبدو أن المشكلة التي وصفتها ليست خطأ، ولكنها إحدى ميزات bl2br.يمكنك فقط كتابة وظيفتك الخاصة لها، مثل:

<?php
function NlToBr($inString)
{
    return preg_replace("%\n%", "<br>", $inString);
}
?>

لقد وجدت هذا في تعليقات وثائق وظيفة nl2br في دليل PHP: http://php.net/manual/de/function.nl2br.php.إذا لم ينجح ما نشرته معك، فمن المفترض أن يكون هناك الكثير من حيث جاء.

(أو استخدم فقط الوظيفة من الإجابة الأخرى التي تم نشرها للتو، وأعتقد أن ذلك يجب أن يعمل أيضًا)

هذا يجب إصلاحه:

preg_replace('/<br(\s+)?\/?>(?!\s*\n)/i', "\n", mysql_result($result,$i,"content"))

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

سوف يترك <br>\n في النص.سوف يتخلص منهم التعبير العادي الإضافي:

preg_replace('/<br(\s+)?\/?>/i', "", $res)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top