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