如何识别文本是否为HTML?(用PHP)
我想从数据库中读取文本条目,其中一些实际上是HTML条目,另一些只是纯文本,可能包含HTML标记,应该显示为文本 然后,应通过首先调用PHP的htmlspecialchars函数,然后通过HTMLPurifier运行结果,将纯文本转换为HTML 或者换句话说,我正在寻找一些关于如何实现isHTML功能的提示:如何识别文本是否为HTML?(用PHP),php,html,text,htmlpurifier,Php,Html,Text,Htmlpurifier,我想从数据库中读取文本条目,其中一些实际上是HTML条目,另一些只是纯文本,可能包含HTML标记,应该显示为文本 然后,应通过首先调用PHP的htmlspecialchars函数,然后通过HTMLPurifier运行结果,将纯文本转换为HTML 或者换句话说,我正在寻找一些关于如何实现isHTML功能的提示: $text = getTextFromDatabase(); if (!isHTML($text)) { $text = htmlspecialchars($text); } $p
$text = getTextFromDatabase();
if (!isHTML($text)) {
$text = htmlspecialchars($text);
}
$purifier = new HTMLPurifier();
$clean_html = $purifier->purify($text);
例如,以下文本将通过htmlspecialchars运行:
看起来应该已经有了一个isHTML函数,但我就是找不到它,我不想重新发明轮子:-。也许甚至可以通过某种HTMLPurifier设置来实现这一点
请注意,如果HTML代码有缺陷,则应由HTMLPurifier处理,并且代码不应通过htmlspecialchars运行:例如,当HTML代码中确实应该有一个结束标记时,有一个开始标记
感谢您的帮助,谢谢:-,
Robert。您只能检查字符串中特定于html的字符
function is_html($string)
{
return preg_match("/<[^<]+>/",$string,$m) != 0;
}
考虑一下这个逻辑:
如果htmlentities检测到有效的html文本,则htmlentities的输入文本和输出文本是不同的。因此:
function isHTML($text){
$processed = htmlentities($text);
if($processed == $text) return false;
return true;
}
我希望这对您有用我在想,我们是否可以将striptagged版本的string与原始版本进行比较。如果它们不同,那么就有一些东西需要剥去。这家伙提出了同样的建议:如果唯一的目的是检测字符串是否包含任何html标记。无论标记是否有效,您都可以尝试以下操作:
function fcl_utilities_is_html($string) {
// Check if string contains any html tags.
return preg_match('/<\s?[^\>]*\/?\s?>/i', $string);
}
您可以在此处验证此功能您可以尝试使用此功能
function isHTML($string){
return ($string != strip_tags($string));
}
这两个都是机器的HTML代码片段,我很难按照您的逻辑确定哪些应该编码&哪些不应该,除非你想写一个可以逻辑解释文本的人工智能,然后知道它们之间的区别…实际的HTML条目和可能包含HTML标记的纯文本之间有什么区别?我喜欢这个想法,但必须稍微扩展一下。使用/^\s*/匹配行首的开始标记,使用/\s*$/匹配行尾的结束标记,这会导致忘记键入/字符的错误。然后,我可以计算一个带标记块的开始和结束标记块中包含了多少行,不允许出现空行/空行。将标记块中的行数除以没有空行的行总数,就可以估计出包含HTML文本的可能性:-如果html标记无效,此解决方案将返回正误。您可以在这里检查,我认为这应该是公认的答案,因为它还可以区分HTML和XML。此函数无法判断字符串是否为HTML。例如,参见isHTML'A=>B意味着如果A为真,那么B也为真;如果A为false,则不会对B进行任何说明。'返回不正确的true。它所做的唯一一件事就是判断字符串是否包含可以转换为HTML实体的字符。
function fcl_utilities_is_html($string) {
// Check if string contains any html tags.
return preg_match('/<\s?[^\>]*\/?\s?>/i', $string);
}
function isHTML($string){
return ($string != strip_tags($string));
}