首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带换行的FILTER_SANITIZE_SPECIAL_CHARS问题

带换行的FILTER_SANITIZE_SPECIAL_CHARS问题
EN

Stack Overflow用户
提问于 2010-06-30 14:51:43
回答 1查看 5.7K关注 0票数 6

是否有人知道如何防止FILTER_SANITIZE_SPECIAL_CHARS将( \n )行转换为(

;)。

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

请帮帮忙。

谢谢:)

EN

回答 1

Stack Overflow用户

发布于 2010-06-30 15:33:02

带有FILTER_SANITIZE_SPECIAL_CHARS选项的FILTER_SANITIZE_SPECIAL_CHARS正在执行它应该做的事情:

<>&和ASCII值小于32的字符,可选择剥离或编码其他特殊字符。

换行符(\n)的ASCII值小于32,因此将转换为&#10;。因此,您可以使用解码将它们转换回原来的字符:

代码语言:javascript
运行
复制
$string = "line 1\nline 2";
$filtered = filter_var($string, FILTER_SANITIZE_SPECIAL_CHARS);
echo "$filtered\n";
echo(html_entity_decode($filtered));

产出:

代码语言:javascript
运行
复制
line 1&#10;line 2
line 1
line 2

但是,我想这一步首先击败了使用FILTER_SANITIZE_SPECIAL_CHARS的目标。

如果导致问题的仅仅是换行符,那么在使用&#10;之前,可以用换行符替换HTML字符实体( nl2br() )。

代码语言:javascript
运行
复制
echo str_replace('&#10;', "\n", $filtered);

产出:

代码语言:javascript
运行
复制
line 1
line 2

或者更好的方法是跳过中间一步,用<br />替换HTML字符实体(<br />)。

代码语言:javascript
运行
复制
echo str_replace('&#10;', '<br />', $filtered);

产出:

代码语言:javascript
运行
复制
line 1<br />line 2

...but,我不能百分之百肯定你想做什么。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3150413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档