【问题标题】:FILTER_SANITIZE_SPECIAL_CHARS problem with line breaksFILTER_SANITIZE_SPECIAL_CHARS 换行问题
【发布时间】:2010-06-30 14:51:43
【问题描述】:

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

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

请帮忙。

谢谢:)

【问题讨论】:

  • 你有一些代码显示换行符被转换成分号吗?

标签: php filter


【解决方案1】:

filter_varFILTER_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 字符实体 (
) 替换为 <br />

echo str_replace('&#10;', '<br />', $filtered);

输出:

line 1<br />line 2

...但我不能 100% 确定您要做什么。

【讨论】:

  • 非常感谢!这样可行!在发送询问之前我真的尝试过,但这是错误的方式;)非常感谢。
猜你喜欢
  • 2012-05-27
  • 1970-01-01
  • 2013-05-17
  • 2014-02-08
  • 2021-05-29
  • 2018-11-19
  • 2016-03-09
  • 2012-01-30
  • 1970-01-01
相关资源
最近更新 更多