PHP:为什么我的strip_tags(&#39;&lt;&#;;&#39; <br/>&#39;)会返回空字符串?

时间:2016-12-06 20:07:18

标签: php

我有一个用于去除不需要的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 ?

当我通过&#39;&lt;&#39;对strip_tags的字符,它返回空。 但是,如果我传入&#39;&gt;&#39;,strip_tags会提供正确的字符。

我需要能够返回&#39;&lt;&#39;从上面的电话。 知道解决方案可能是什么吗?

2 个答案:

答案 0 :(得分:1)

正如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!

答案 1 :(得分:0)

因为您处于html环​​境中。如果html解析器遇到<,那就是一个开头标记。如果<没有这个含义,那么您需要将其替换为等效的html实体:&lt;