0

データベースには、このようなコードがあります

Some text
<pre>
#include <cstdio> 

int x = 1;
</pre>
Some text

phpQuery を使用して解析しようとすると<cstdio>、タグとして解釈されるため失敗します。

使用できますhtmlspecialcharsが、タグ内にのみ適用するにpreは、まだ解析を行う必要があります。正規表現を使用することもできますが、はるかに難しくなり (preタグの可能な属性を処理する必要があります)、パーサーを使用するという考えは、この種の正規表現を回避することでした。

私がする必要があることをするための最良の方法は何ですか?

4

3 に答える 3

0

エラーは、データベースにHTMLまだ正しくエンコードされていないテキストが含まれていることです。

したがって、時間を節約して正しい解決策を見つけたい場合は、データベース内の HTML が正しくエンコードされていることを確認する必要があります。つまり、データベースに保存する前にhtmlspecialchars()、すべてが ( を使用して)正しくエンコードされていることを確認する必要があります。

それ以外の場合は、データベースにガベージを保存するだけであり、「そのガベージをきれいにする」ために特別なコードを記述する必要があります。

他の解決策は回避策であり、将来的に貴重な時間を費やすことになります.

したがって、最善の解決策は、データベースに書き込む内容が正しいことを確認することです。

于 2011-08-26T00:52:27.300 に答える
0

タグの単純な属性のみを考慮して、最終的に正規表現の方法に進みましたpre(属性内に「>」はありません):

  foreach(array('pre', 'code') as $sTag)
     $s = preg_replace_callback("#\<($sTag)([^\>]*?)\>(.+?)\<\/$sTag\>#si",
     function($matches)
     {
        $matches[3] = str_replace(array('&amp;', '&lt;', '&gt;'), array('&', '<', '>'), $matches[3]);      
        return "<{$matches[1]} {$matches[2]}>".htmlentities($matches[3], ENT_COMPAT, "UTF-8")."</{$matches[1]}>";
     },
     $s);

また、既に html エンティティに変換されているキャラクターも処理します (2 回はしたくありません)。

完璧な解決策ではありませんが、適用する必要があるデータがあれば、うまくいきます。

于 2011-08-26T00:26:12.113 に答える
0

アセンブリの前に HTML (& > など) をエンコードすることを忘れないでください

于 2011-08-23T14:08:03.877 に答える