игнорировать pre-теги при использовании nl2br ()

Я хочу игнорировать следующие теги при использовании nl2br. У меня есть стандартные pre, а также некоторые специальные теги pre, которые стилизованы. Когда я это делаю, это теги в тегах <pre> .

 string = "Here is some text <pre> <xml> <item></item> <name></name> </xml> </pre> That includes new lines and carriage returns what can i do to add <p> and <br> tags but not to the text below inside the <pre> tags </pre>. <pre class="brush: csharp; title: ;" title=""> public MainPage() { // select the culture (de, it, fr, tr are supported) var ci = new System.Globalization.CultureInfo("tr-TR"); // de-DE etc // this controls the UI strings System.Threading.Thread.CurrentThread.CurrentUICulture = ci; // this controls number and date formatting (optional in this sample) //System.Threading.Thread.CurrentThread.CurrentCulture = ci; // initialize the component<br> InitializeComponent(); } </pre>"; 

вернуть это

  echo nl2br($string); Here is some text <br /><br /> <pre> <xml> <item></item> <name></name> </xml> </pre> <br /><br /> That includes new lines and carriage returns<br /> what can i do to add <p> and <br> tags but not to the text below inside<br /> the <pre> tags </pre>.<br /> <br /> <pre class="brush: csharp; title: ;" title=""> <br> public MainPage() { // select the culture (de, it, fr, tr are supported) var ci = new System.Globalization.CultureInfo("tr-TR"); // de-DE etc // this controls the UI strings System.Threading.Thread.CurrentThread.CurrentUICulture = ci; // this controls number and date formatting (optional in this sample) //System.Threading.Thread.CurrentThread.CurrentCulture = ci; // initialize the component<br> InitializeComponent(); } </pre> 

Кажется, что игнорируется, что есть два тега. Я думаю, что это может быть связано с комментариями.

Используйте этот код.

 function my_nl2br($string){ $string = str_replace("\n", "<br />", $string); if(preg_match_all('/\<pre class="brush: csharp; title: ;"\>(.*?)\<\/pre\>/', $string, $match)){ foreach($match as $a){ foreach($a as $b){ $string = str_replace('<pre class="brush: csharp; title: ;">'.$b.'</pre>','<pre class="brush: csharp; title: ;">'.str_replace("<br />", "\n", $b)."</pre>", $string); } } } return $string; } echo my_nl2br($description); 

Но он игнорирует возврат каретки в <pre class="brush: csharp; title: ;" title=""> <pre class="brush: csharp; title: ;" title=""> .

вывод этого

 public MainPage() { // select the culture (de, it, fr, tr are supported) var ci = new System.Globalization.CultureInfo("tr-TR"); // de-DE etc // this controls the UI strings System.Threading.Thread.CurrentThread.CurrentUICulture = ci; // this controls number and date formatting (optional in this sample) //System.Threading.Thread.CurrentThread.CurrentCulture = ci; // initialize the component InitializeComponent(); } 

Related of "игнорировать pre-теги при использовании nl2br ()"

Решение из комментариев руководства PHP:

 function my_nl2br($string){ $string = str_replace("\n", "<br />", $string); if(preg_match_all('/\<pre\>(.*?)\<\/pre\>/', $string, $match)){ foreach($match as $a){ foreach($a as $b){ $string = str_replace('<pre>'.$b.'</pre>', "<pre>".str_replace("<br />", "", $b)."</pre>", $string); } } } return $string; } 

http://www.php.net/manual/en/function.nl2br.php#100120

Это старо, но, возможно, кто-то еще изучает это, поэтому …

В вашем примере вы используете

 <pre class="brush: csharp; title: ;" title=""> 

но в вашем коде, который вы

 <pre class="brush: csharp; title: ;">