我想从数据库中读取文本条目,其中一些实际上是HTML条目,另一些只是纯文本,可能包含HTML标记,应该显示为文本。
那些纯文本应该转换为HTML,首先调用PHP的htmlspecialchars()
函数,然后通过HTMLPurifier运行结果。
或者换句话说,我正在寻找有关如何实现isHTML()函数的一些技巧:
$text = getTextFromDatabase();
if (!isHTML($text)) {
$text = htmlspecialchars($text);
}
$purifier = new HTMLPurifier();
$clean_html = $purifier->purify($text);
因此,例如,以下文字将通过htmlspecialchars
:
The <p> tag of HTML has to be followed by a </p> tag to end the paragraph.
以下文字不会通过htmlspecialchars
:
<p>These are few lines of HTML.</p>
<div>There might be multiple independent</div>
<p>but valid HTML blocks in it.</p>
似乎应该已经存在isHTML()
功能,但我无法找到它并且我不想重新发明轮子:-)。也许甚至可以通过某种HTMLPurifier设置来实现这一点?
请注意,如果HTML代码有问题,则应由HTMLPurifier处理,代码不应通过htmlspecialchars
运行。 :-)例如,当HTML代码中确实应该有一个结束<p>
标记时,有一个开始</p>
标记。
感谢任何帮助,谢谢:-),
罗伯特。
答案 0 :(得分:7)
考虑这个逻辑: 如果htmlentities检测到有效的html文本,则输入文本和htmlentities的输出文本不同。所以:
function isHTML($text){
$processed = htmlentities($text);
if($processed == $text) return false;
return true;
}
我希望这对你有用
答案 1 :(得分:5)
你只能检查字符串
中特定于html的字符function is_html($string)
{
return preg_match("/<[^<]+>/",$string,$m) != 0;
}
答案 2 :(得分:5)
您可以尝试使用此功能
function isHTML($string){
return ($string != strip_tags($string));
}
答案 3 :(得分:1)
如果只是为了检测该字符串是否包含任何html标记。无论标签是否有效,您都可以尝试:
function fcl_utilities_is_html($string) {
// Check if string contains any html tags.
return preg_match('/<\s?[^\>]*\/?\s?>/i', $string);
}
验证这一点
答案 4 :(得分:0)
我在想是否可以将带标签的字符串版本与原始字符串进行比较。如果它们不同 - 那么就有一些东西需要剥离。这家伙提出了同样的建议:https://subinsb.com/php-check-if-string-is-html