2

PHP ファイルで解析される XML ファイルがあります。正しく解析するには、CDATA を必要とする多くの「特殊」文字を含める必要があります。

すべてのタグを読み取るように PHP ファイルに指示する方法はありますか?

現在、すべての XML タグを作成するために、CDATA ブロックを配置する必要があります。

<tag><![CDATA[blah.......]]></tag>

XML のすべてのタグに対して毎回 CDATA を書き込む必要がないように設定する方法はありますか?

4

2 に答える 2

2

CDATAは悪い考えです!それには多くの問題があります。代わりにすべきことはhtmlspecialchars()、すべての値に使用することです。

了解しました。反対票を保持してください。CDATAに関するいくつかの問題があります。

]]>まず、簡単な方法です。シーケンスをエスケープすることはできません。これは大したことではないように思われるかもしれませんが、「文字シーケンスをエスケープする」方法を選択する場合は、すべてのシーケンスをエスケープできる方法を選択する必要があります。

ここで大きな問題があります。CDATAは、Latin1データをUTF-8ドキュメントに挿入するためのハックとしてよく使用されます。人々は、私はXMLでエスケープの問題を抱えていると考えているので、回避策としてCDATAを使用します。

CDATAでは、任意の文字シーケンスが許可され、XMLドキュメントの指定された文字エンコードはこのブロックに関連しなくなります。ただし、どのタイプのテキストにも実際には文字エンコードがあり、エンコードを変換する代わりに(何をすべきか)、CDATAでラップすることでこれを「ハック」します。

また、制御文字はまだ許可されていないため、バイナリデータをエンコードするための実行可能な方法ではありません。

したがって、CDATAの種類は、「ここにドラゴンがいる」ことを意味します。ここには、指定されたエンコーディングではないバイトがあります。制御文字がないことがわかります。

文字エンコードに関するすべての仮定がなくなったため、これは消費者にとって悪い考えです。

ここにいくつかのリンクがあります:

于 2012-08-10T19:48:12.850 に答える
2

あなたが言及している「特殊文字」を具体的に教えてくれませんでしたが、ある種のアクセント付き文字、またはラテン文字以外の文字などを意味していると思いますか?

ほとんどの場合、UTF-8 文字セットを使用してドキュメントを出力することで問題を解決できます。

残りのケースでは、XML エンティティを使用して解決できます&#160;

これらは両方とも、CDATA を使用するよりも優れたソリューションです。

于 2012-08-10T21:02:09.690 に答える