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

zab*_*rob 0 html php 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);
Run Code Online (Sandbox Code Playgroud)

因此,例如以下文本将贯穿htmlspecialchars:

The <p> tag of HTML has to be followed by a </p> tag to end the paragraph.
Run Code Online (Sandbox Code Playgroud)

以下文字将不会贯穿htmlspecialchars:

<p>These are few lines of HTML.</p>
<div>There might be multiple independent</div>
<p>but valid HTML blocks in it.</p>
Run Code Online (Sandbox Code Playgroud)

似乎应该已经有了一个isHTML()功能,但我不能碰巧找到它,我不想重新发明轮子:-).也许甚至可以使用某种HTMLPurifier设置来做到这一点?

请注意,如果HTML代码有问题,则应由HTMLPurifier处理,并且不应运行代码htmlspecialchars.:-)例如,<p></p>HTML代码中确实应该有一个结束标记时,有一个开始标记.

任何帮助表示赞赏,谢谢:-),
Robert.

Edg*_*zco 7

考虑这个逻辑:如果htmlentities检测到有效的html文本,那么来自htmlentities的输入文本和输出文本是不同的.所以:

function isHTML($text){
   $processed = htmlentities($text);
   if($processed == $text) return false;
   return true; 
}
Run Code Online (Sandbox Code Playgroud)

我希望这适合你

  • 此函数无法判断字符串是否为 HTML。例如,参见“isHTML('A =&gt; B 意味着如果 A 为真,则 B 也为真;如果 A 为假,则没有提及 B。')”返回不正确的“true”。它唯一做的就是判断字符串是否包含可以转换为 HTML 实体的字符。 (2认同)

JTC*_*JTC 5

你只能检查字符串中特定于html的字符

function is_html($string)
{
  return preg_match("/<[^<]+>/",$string,$m) != 0;
}
Run Code Online (Sandbox Code Playgroud)


Mut*_*esh 5

如果唯一的目的是检测该字符串是否包含任何 html 标签。无论标签是否有效,您都可以尝试以下操作:

function is_html($string) {
  // Check if string contains any html tags.
  return preg_match('/<\s?[^\>]*\/?\s?>/i', $string);
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里验证这一点https://regex101.com/r/2g7Fx4/4


小智 5

您可以尝试使用此功能

function isHTML($string){
    return ($string != strip_tags($string));
}
Run Code Online (Sandbox Code Playgroud)