【发布时间】:2010-06-30 14:51:43
【问题描述】:
有人知道如何防止 FILTER_SANITIZE_SPECIAL_CHARS 将换行符 ( \n ) 转换为 ( ; )。
我正在为我的网站开发一个简单的评论系统,我发现 php 过滤器将 \n 转换为 所以使用 nl2br() 时没有换行符。
请帮忙。
谢谢:)
【问题讨论】:
-
你有一些代码显示换行符被转换成分号吗?
有人知道如何防止 FILTER_SANITIZE_SPECIAL_CHARS 将换行符 ( \n ) 转换为 ( ; )。
我正在为我的网站开发一个简单的评论系统,我发现 php 过滤器将 \n 转换为 所以使用 nl2br() 时没有换行符。
请帮忙。
谢谢:)
【问题讨论】:
filter_var 和 FILTER_SANITIZE_SPECIAL_CHARS 选项正在做它应该做的事情:
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 的目的。
如果只是换行符导致问题,您可以在使用 nl2br() 之前将 HTML 字符实体 (
) 替换为换行符:
echo str_replace(' ', "\n", $filtered);
输出:
line 1
line 2
或者甚至更好,跳过中间步骤,将 HTML 字符实体 (&#10;) 替换为 <br />:
echo str_replace(' ', '<br />', $filtered);
输出:
line 1<br />line 2
...但我不能 100% 确定您要做什么。
【讨论】: