PHP:为什么我的 strip_tags('<', '<br>') 返回一个空字符串?

3
我有一个函数用于去除不需要的HTML标签。 例如:
function getValidStrings($inputStr, $allowedTag) {
   return trim(strip_tags($inputStr, $allowedTag));
} // End function

// Here I am calling this function which is defined in an included php Class file
$formatter = new $StringTextFormatter;

$validString = $formatter->getValidStrings('<', '<br>');
// The $validString has empty string "" ... Why ?

当我将'<'字符传递给strip_tags时,它返回空值。然而,如果我传递'>',strip_tags会返回正确的字符。
我需要能够从上面的调用中返回'<'。你有什么解决办法吗?

1
第二个参数是允许的标签,< 不是一个标签。你想做什么? - AbraCadaver
警告 因为strip_tags()函数实际上并不验证HTML,所以部分或损坏的标签可能会导致删除比预期更多的文本/数据。http://php.net/manual/en/function.strip-tags.php - Clive
正确。但是如果输入的字符串中有“<”字符,strip_tags不应该允许它进行处理吗?并且返回相同的字符?因为它只是一个字符,而不是完整的标签。 - Andy
没有标签以 > 开头,所以这是有道理的,是的。有点儿。我能理解你为什么问了。 - Clive
我正在完成编写自己的字符串处理自定义函数,使用正则表达式的方式,这可能是我的需求的最佳方法。 - Andy
显示剩余2条评论
2个回答

2

因为你处于 HTML 上下文中。如果 HTML 解析器遇到 <,那就是一个开标签。如果 < 没有这个意义,那么你需要将其替换为其等效的 HTML 实体:&lt;


2
正如Federkun所说,它将<视为标签的开始。您传入了损坏的HTML,它尽力给您想要的内容:一个没有(大部分)HTML的字符串。正如Clive所指出的那样,他们在手册中警告过您:

因为strip_tags()实际上并不验证HTML,所以部分或损坏的标记可能导致删除比预期更多的文本/数据。

如果您在那个错误的<之后传入任何内容,它也会被剥离。它必须是与HTML相似的东西才能正常工作。
echo strip_tags('<bad HTML string here<br>'); // empty string
echo strip_tags('<bad HTML<br> Hello!'); // Also empty
echo strip_tags('<bad HTML> Hello!'); // Hello!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接