2010-03-22 3 views
6

Таким образом, функция nl2br удобна. За исключением моего веб-приложения, я хочу сделать наоборот, интерпретировать разрывы строк как новые строки, так как они будут отражены в предварительно заполненной форме.Напротив nl2br? Это str_replace?

str_replace может принять <br /> и заменить его на все, что захочу, но если я положил \ n, это будет означать обратную косую черту и n. Он работает только в том случае, если я помещаю буквальный разрыв строки в середине моего скрипта и разбиваю отступ (поэтому нет конечного пространства).

См:

<?=str_replace('<br />',' 
',$foo)?> 

Я пропускаю управляющие символы? Я думаю, что я перепробовал все комбинации ...

ответ

11

Вы пишете '\n'? Потому что \ n будет интерпретироваться правильно, если вы окружите его двойными кавычками: "\n".

Отключить тему: <?= Синтаксис злой. Пожалуйста, не используйте его для других разработчиков в вашей команде.

+4

Нет, это не зло. Это проблема только в том случае, если вы используете XML-документ. И даже тогда легко обойти. Множество людей используют его в своих взглядах. Это намного компактнее, чем ' ryeguy

+3

+0

@Julian Они не злые, просто используйте их там, где они уместны. Это, скорее всего, ваши шаблоны просмотров. Проблема с синтаксисом shortag заключается в том, что XML doctype, '', Будет интерпретироваться PHP как блок кода, что приведет к синтаксической ошибке. Теперь, если вы не используете XHTML, это не проблема, но если это так, вам нужно отказаться от использования shorttags или просто «echo» из doctype (что просто). – ryeguy

11

Вы хотели этого:

<?=str_replace('<br />',"\n",$foo)?> 

Вы, наверное, забыли использовать двойные кавычки. Строки анализируются только для специальных символов, если вы используете двойные кавычки.

+0

Двойные кавычки - сложно. Я думал, что сойду с ума. –

17

Вероятно, будут ситуации, когда вашего кода недостаточно; так, что о чем-то вроде этого, чтобы сделать вашу замену:

$html = 'this <br>is<br/>some<br />text <br />!'; 
$nl = preg_replace('#<br\s*/?>#i', "\n", $html); 
echo $nl; 

т.е. немного сложнее, чем просто str_replace ;-)

Примечание: Я бы вообще сказать не использовать регулярное выражение для управления HTML - но в этом случае рассмотрение регулярного выражения будет довольно простым, я полагаю, что все будет в порядке.


Кроме того, обратите внимание, что я использовал "\n"

  • т.е. перевод строки: \n
  • в double-quoted string, поэтому он интерпретируется как символ новой строки, а не буквальным \n


В основном, тег <br> обычно выглядит так:

  • <br>
  • или <br/>, с любым количеством пробелов до /

И , что вторая точка находится где str_replace недостаточно.

+3

Отклонено нижний план. Этот ответ дает отличную оценку. Если вы можете быть уверены, что все, что вы хотите сделать, было создано nl2br, вам хорошо идти. Однако, если вы интерпретируете ввод пользователя, принятие любого типа тега разрыва строки является обязательным. – Matchu

+0

??? В регулярном выражении не создает проблем в PHP? –

0

Я просто пропустил nl2br() и использовал это по-другому, как это:

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

и все работает отлично.

Для полного описания, пожалуйста, посетите мой блог, здесь:

How to use nl2br and reverse br2nl

0

Альтернатива ответ @PascalMARTIN «s

$string = stri_replace(array(
    '<br>', 
    '<br/>', 
    '<br />', 
), "\n", $string); 

Это не работа с несколькими пробелами типа <br />, но это должен быть очень редкий случай.

Смежные вопросы