2016-12-06 113 views
2

我有一个功能,用于去除不需要的HTML标记。 e.gPHP:为什么我的strip_tags('<', '<br>')返回空字符串?

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

+0

_ **警告** 因为strip_tags()实际上并未验证HTML,所以部分或破碎的标记可能导致删除比期望的更多文本/数据。http://php.net/manual/en/function .strip-tags.php – Clive

+0

正确。但是,如果输入字符串具有“<”字符,strip_tags是否允许它处理?并返回相同的字符?因为它只是一个字符而不是一个完整的标签。 – Andy

回答

0

因为你在html上下文中。如果一个html解析器遇到<,那是一个开始标记。如果<没有这个意思,那么你需要与它对应的HTML实体替换:&lt;

1

正如Federkun说,它看到<作为标签的开始。您传递了错误的HTML,并尽力为您提供您想要的内容:一个没有(大部分)HTML的字符串。正如克莱夫指出,他们警告过你关于这个在手动

因为用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! 
相关问题