如何识别文本是否为HTML? (在PHP中)

时间:2013-08-14 21:16:29

标签: php html text htmlpurifier

我想从数据库中读取文本条目,其中一些实际上是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>标记。

感谢任何帮助,谢谢:-),
罗伯特。

5 个答案:

答案 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);
}

您可以在https://regex101.com/r/2g7Fx4/4

验证这一点

答案 4 :(得分:0)

我在想是否可以将带标签的字符串版本与原始字符串进行比较。如果它们不同 - 那么就有一些东西需要剥离。这家伙提出了同样的建议:https://subinsb.com/php-check-if-string-is-html