0

私は自分のウェブサイト用に独自のBBCodeパーサーを作成しようとしていますが、PREタグ内のコードとPREタグ自体を除いて、「htmlentities()」への方法を探しています。

例えば:

<b> Hello world </ b>(出力&lt; b&gt; Hello world&lt;&gt;)
<pre>"これはHTMLエンティティに変換してはいけません"</pre>(出力<pre>"これはHTMLエンティティに変換してはいけません"</ pre>)

私はこれをどのように行うのか本当に分かりませんでした。

どんな種類の助けもいただければ幸いです:)

ありがとう。

4

2 に答える 2

2

練習するなら、わかりました。ただし、機能を取得するだけの場合は、車輪の再発明を行わないでください。構文解析は簡単な作業ではなく、成熟したパーサーがたくさんあります。もちろん、私は最初にPEARパッケージを見ていきます。HTML_BBCodeParserを試してください。

本当に自分でやりたいのなら、2つの方法があります:

  • 正規表現
  • ステートマシン

通常、両方を組み合わせると便利です。しかし、タグは入れ子になっていて形が悪い可能性があるため、コーディングするのは本当に難しいことです。少なくとも、一般的なパーサーコードを使用して、語彙フィールドを定義します。最初から、Webサイトのコーディングに使用するすべての時間がかかります。

ところで:BBparserを使用しても、ユーザー入力をサニタイズする必要はありません...

編集:今日は気分がいいので、HTML_BBCodeParserの使用方法の抜粋を次に示します。

// if you don't know how to use pear, you'd better learn that quick
// set the path so pear is in it
ini_set("include_path", ini_get("include_path").":/usr/share/pear");
// include PEAR and the parser
require_once("PEAR.php");
require_once("HTML/BBCodeParser.php");

// you can tweak settings from a ini fil
$config = parse_ini_file("BBCodeParser.ini", true);
$options = &PEAR::getStaticProperty("HTML_BBCodeParser", "_options");
$options = $config["HTML_BBCodeParser"];

// here start the parsing
$parser = new HTML_BBCodeParser();
$parser->setText($the_mighty_BBCode);
$parser->parse();
$parsed = $parser->getParsed();

// don't forget to clean that
echo htmlspecialchars(striptags($parsed));
于 2009-08-14T15:44:59.990 に答える
1

あなたは&lt;pre&gt; … &lt;/pre&gt;元に戻すことができます<pre> … </pre>

// convert anything
$str = htmlspecialchars($str);
// convert <pre> back
$str = preg_replace('/&lt;pre&gt;((?:[^&]+|&(?!lt;\\/pre&gt;))*)&lt;\\/pre&gt;/s', '<pre>$1</pre>', $str);
于 2009-08-14T16:08:56.527 に答える