有人知道如何防止FILTER_SANITIZE_SPECIAL_CHARS将换行符(\n)转换为( )吗。
我正在为我的网站开发一个简单的评论系统,我发现php过滤器将\n转换为,因此在使用nl2br()时没有换行符。
请帮忙解决。
谢谢:)
filter_var
函数使用FILTER_SANITIZE_SPECIAL_CHARS
选项时,会执行其预期的功能:
对HTML字符('"<>&)以及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
失去意义。
如果只有换行符导致问题,你可以在使用 nl2br()
之前,将 HTML 字符实体 (
) 替换为换行符。
echo str_replace(' ', "\n", $filtered);
输出:
line 1
line 2
或者更好的方法是跳过中间步骤,用HTML字符实体(
)替换为<br />
:
echo str_replace(' ', '<br />', $filtered);
输出:
line 1<br />line 2
但我并不完全确定您想做什么。