1

データベースからテキスト エントリを読み取りたいのですが、実際には HTML エントリもあれば、テキストとして表示する必要がある HTML マークアップを含むプレーン テキストもあります。

プレーン テキストの場合は、最初に PHP の関数を呼び出しhtmlspecialchars()てから HTMLPurifier を介して結果を実行することにより、HTML に変換する必要があります。

つまり、 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

次のロジックを考慮してください。有効な html テキストが htmlentities によって検出された場合、入力テキストと 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 に答える
0

タグを取り除いたバージョンの文字列をオリジナルと比較できるかどうかを考えていました。それらが異なる場合、削除するものがありました。この男は同じことを提案しています: https://subinsb.com/php-check-if-string-is-html

于 2015-08-20T09:32:26.387 に答える