从字符串中剥离HTML标记时需要注意什么?

时间:2013-11-04 13:40:58

标签: php regex xss

我想从输入字符串中清除<>字符,以使其“安全”,避免脚本注入恶作剧。

我知道strip_tags()可用于此,但这会产生如下字符串:

We are looking at counts < 5000 for this test run被截断为:

We are looking at counts

我希望将其转换为:

We are looking at counts 5000 for this test run

这并不完美,但字符串中的信息就会丢失。

我知道这可以用例如正则表达式来实现,但这有什么不安全的吗?我的意思是,strip_tags()是否对字符串执行了一些特殊操作,而刚删除<>的正则表达式不会这样做?

我现在不想使用htmlentities(),因为这会混淆我们的前端代码。

2 个答案:

答案 0 :(得分:1)

如果您只想删除<>,请使用以下代码:

$str = 'We are looking at counts < 5000 for this test run';

$convertedBracketStr = str_replace(array('<', '>'), null, $str);

结果将是:We are looking at counts 5000 for this test run

答案 1 :(得分:0)

http://php.net/manual/en/function.htmlspecialchars.php

这会将&lt ;,&gt;和许多其他字符转换为HTML实体,以便在页面上正确显示。