6

私はしばらくの間これに苦労してきました。ある時点でXMLを出力する多言語のWebアプリがあります。このXMLには任意の言語を含めることができるため、サニタイズへの私のアプローチは、XMLを中断する特定の文字の挿入を禁止することでした。それとCDATAでできる限りラッピングしますが、属性には大量のコンテンツがあります。括弧、ピリオド、ダッシュ、ティック、アポストロフィなどの完全に有効な文字が常に使用され、それらが機能するため、特殊文字を禁止したくありません。

XML属性を壊すが、言語はそのままにしておくすべての文字を取り除くための最良の方法は何ですか?

更新:
http ://en.wikipedia.org/wiki/CDATA#CDATA-type_attribute_valueを見つけました。これは、DTDを使用して属性をCDATAセクションとして記述できることを示しています。しかし、これは真実ではないようです。

<?xml version="1.0" ?> 
<!DOCTYPE foo [
  <!ELEMENT foo EMPTY>
  <!ATTLIST foo a CDATA #REQUIRED>
]>
<foo a="&bull;"><![CDATA[ &bull; ]]> </foo>

バリデーターは、ブルが属性のエンティティではないことについて不平を言います。属性を削除すると有効になります。また、スキーマが進むべき道だと聞いているので、上記のようなことが可能であるが、代わりにXMLスキーマを使用するのであれば、それは素晴らしいことです。

ありがとう!

4

2 に答える 2

2

これは有効です

<?xml version="1.0" ?> 
<!DOCTYPE foo [
  <!ELEMENT foo EMPTY>
  <!ATTLIST foo a CDATA #REQUIRED>
]>
<foo a="&amp;bull;"><![CDATA[ &bull; ]]> </foo>

特殊文字をHTMLエンティティに変換できます

htmlentities($str);

と逆転

html_entity_decode($str);

参照:http ://www.php.net/manual/en/function.htmlentities.php

「htmlメタ文字」も参照してください

于 2012-06-09T22:07:32.940 に答える
-1

あなたがする必要があるのは<!CDATA[ ]]>タグでそれらを包むことだけです。htmlentitiesを投入することもできます。

attr="<!CDATA[' . htmlentities($value) . ']]>"
于 2012-05-30T23:07:45.327 に答える