1

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

任何帮助表示赞赏,已经感谢:-),
罗伯特。

4

5 回答 5

9

您可以尝试使用此功能

function isHTML($string){
    return ($string != strip_tags($string));
}
于 2017-11-10T08:40:02.750 回答
8

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

function isHTML($text){
   $processed = htmlentities($text);
   if($processed == $text) return false;
   return true; 
}

我希望这对你有用

于 2013-08-14T21:38:48.787 回答
5

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

function is_html($string)
{
  return preg_match("/<[^<]+>/",$string,$m) != 0;
}
于 2013-08-14T21:20:50.877 回答
2

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

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

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

于 2017-07-25T00:17:18.950 回答
0

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

于 2015-08-20T09:32:26.387 回答