是否有人知道如何防止FILTER_SANITIZE_SPECIAL_CHARS将换行符(\ n)转换为(
)。
我正在为我的网站开发一个简单的评论系统,我发现php过滤器将\ n转换为 因此,当使用nl2br()时,没有换行符。
请帮忙。谢谢:)
答案 0 :(得分:13)
FILTER_SANITIZE_SPECIAL_CHARS
选项的 filter_var
正在执行它应该执行的操作:
HTML-escape'“<>&和字符 ASCII值小于32,可选 剥离或编码其他特殊的 字符。
换行符(\n
)的ASCII值小于32,因此将转换为
。因此,您可以使用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 line 2
line 1
line 2
但我认为这首先打败了使用FILTER_SANITIZE_SPECIAL_CHARS
的目标。
如果只是导致问题的换行符,则可以在使用
之前用换行符替换HTML字符实体(nl2br()
):
echo str_replace(' ', "\n", $filtered);
输出:
line 1
line 2
或者甚至更好,跳过中间步骤,并用
替换HTML字符实体(<br />
):
echo str_replace(' ', '<br />', $filtered);
输出:
line 1<br />line 2
...但我不是100%确定你想要做什么。