私はphp v5.3を使用しています。文字列を有効な xml に変換したいと思います。Xmlには明らかに「&」文字をエンコードする必要&
がありますが、これを行うことができるすべての関数は、「ë」などの文字をxmlエンティティxmlが受け入れない(ë
この場合)に変換します。どの機能を使用すればよいですか?
4 に答える
htmlspecialchars
必要なものです。とは異なりhtmlentities
、変換するものよりもはるかに選択的です。
htmlentities
ドキュメントから:
この関数は、htmlentities() を除いてすべての点で htmlspecialchars() と同じです。HTML 文字エンティティに相当するすべての文字がこれらのエンティティに変換されます。
<?php
$a = "I love things & stuffë";
$b = htmlspecialchars($a);
$c = htmlentities($a);
echo "$b\n$c\n";
出力:
I love things & stuffë
I love things & stuffë
XML を作成する場合は、DOMDocument
すでに手元にある可能性があります。そうでない場合でも、簡単に作成できます。を使用するDOMDocument
と、XML に対して 100% 整形式のテキストを作成できます。
$text = "I'm using php v5.3. I would like to convert a string to valid xml. Xml apparently requires '&' characters to be encoded to & but all functions I can find which do this also convert characters like 'ë' to html entities xml doesn't accept (ë in this case). What function should I use?";
$doc = new DOMDocument();
echo $doc->saveXML($doc->createTextNode($text));
これにより、次の出力が得られます(逐語的):
I'm using php v5.3. I would like to convert a string to valid xml. Xml apparently requires '&' characters to be encoded to &amp; but all functions I can find which do this also convert characters like 'ë' to html entities xml doesn't accept (&euml; in this case). What function should I use?
$str = preg_replace('/\s&\s/', '&', $str);
これにより、末尾と末尾の空白で囲まれたすべての「&」が置き換えられます。必要に応じてパターンを少し調整するだけです
& のみに変換したい場合は、&
これを試すことができます:
$encoded_str = str_replace('&','&',$original_str);
&amp;
元々持っていた場合のようなものを避けるために、それを防ぐ1つの方法は、最初&
にすべてを変換することです&
$encoded_str = str_replace('&','&',str_replace('&','&',$original_str));