有换行符的FILTER_SANITIZE_SPECIAL_CHARS问题

med*_*d87 4 php filter

有没有人知道如何防止FILTER_SANITIZE_SPECIAL_CHARS将换行符(\n)转换为( ).

我正在为我的网站开发一个简单的评论系统,我发现php过滤器将\n转换为如此,当使用nl2br()时,没有换行符.

请帮忙.

谢谢 :)

Mik*_*ike 13

filter_varFILTER_SANITIZE_SPECIAL_CHARS选项是做什么是应该做的:

HTML-escape'"<>&和ASCII值小于32的字符,可选地剥离或编码其他特殊字符.

换行符(\n \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));
Run Code Online (Sandbox Code Playgroud)

输出:

line 1&#10;line 2
line 1
line 2
Run Code Online (Sandbox Code Playgroud)

但我想这首先打败了使用的对象FILTER_SANITIZE_SPECIAL_CHARS.

如果它只是引起问题的换行符,则可以&#10;在使用之前用换行符替换HTML字符实体()nl2br():

echo str_replace('&#10;', "\n", $filtered);
Run Code Online (Sandbox Code Playgroud)

输出:

line 1
line 2
Run Code Online (Sandbox Code Playgroud)

或者甚至更好,跳过中间步骤,并将HTML字符实体(&#10;)替换为<br />:

echo str_replace('&#10;', '<br />', $filtered);
Run Code Online (Sandbox Code Playgroud)

输出:

line 1<br />line 2
Run Code Online (Sandbox Code Playgroud)

......但我不是百分之百确定你要做的是什么.