2010-06-30 5 views
4

Кто-нибудь знает, как предотвратить преобразование разрывов строк (\ n) в FILTER_SANITIZE_SPECIAL_CHARS (& # 10;).Проблема FILTER_SANITIZE_SPECIAL_CHARS с разрывами строк

Я разрабатываю простую систему комментариев для своего сайта, и я обнаружил, что php-фильтр преобразует \ n в , поэтому при использовании nl2br() нет разрывов строк.

помогите пожалуйста.

спасибо :)

+0

У вас есть код, который показывает, что новые строки преобразуются в полуколоны? – salathe

ответ

12

filter_var с опцией FILTER_SANITIZE_SPECIAL_CHARS делает то, что он должен делать:

HTML-бежать»<> & и символы со значением менее 32 ASCII, необязательно полосы или кодируют другие специальные символы .

новой строки символ (\n) имеет значение ASCII меньше 32, поэтому оно будет преобразовано в &#10;. Таким образом, вы можете использовать html_entity_decode, чтобы преобразовать их обратно в их исходные символы:

$string = "line 1\nline 2"; 
$filtered = filter_var($string, FILTER_SANITIZE_SPECIAL_CHARS); 
echo "$filtered\n"; 
echo(html_entity_decode($filtered)); 

Выходы:

line 1&#10;line 2 
line 1 
line 2 

Но я думаю, что побеждает объект с помощью FILTER_SANITIZE_SPECIAL_CHARS в первую очередь.

Если это только символ новой строки, который является причиной проблемы, вы можете заменить объект HTML символов (&#10;) с символом новой строки, перед использованием nl2br():

echo str_replace('&#10;', "\n", $filtered); 

Выходы:

line 1 
line 2 

Или, возможно, даже лучше, пропустите средний шаг и замените объект символа HTML (&#10;) на <br />:

echo str_replace('&#10;', '<br />', $filtered); 

Выходы:

line 1<br />line 2 

... но я не 100% уверен, что это вы пытаетесь сделать.

+0

большое вам спасибо! это работает! Я действительно пробовал это, прежде чем отправлять вопросы, но это был неправильный путь;) большое спасибо. – med87

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