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.
考虑这个逻辑:如果htmlentities检测到有效的html文本,那么来自htmlentities的输入文本和输出文本是不同的.所以:
function isHTML($text){
$processed = htmlentities($text);
if($processed == $text) return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
我希望这适合你
你只能检查字符串中特定于html的字符
function is_html($string)
{
return preg_match("/<[^<]+>/",$string,$m) != 0;
}
Run Code Online (Sandbox Code Playgroud)
如果唯一的目的是检测该字符串是否包含任何 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)