2017-01-04 12 views
0

問題があります。XMLを置き換えます&(PHP)

& 

どのように私は、通常の「&」に置き換えることができます:私のXMLファイルに含まれている名前を持ついくつかの値がありますか? それは、二重ecapedかにISNない...

<product> 
    <title>Command &amp; Conquer 3tiberium Wars</title> 
    <url>http://www.onlinekeystore.com/command-and-conquer-3-tiberium-wars-cd-key-origin.html</url> 
    <priceEUR>7.99</priceEUR> 
    </product> 

私のコードであれば、それは問題ではありませんので、それはただの名前です....

を、私はこの1つを試してみましたが、それは動作していません働いている:

$string= str_replace("&amp;", ' & ', $string); 

ご挨拶とありがとう!

+0

あなたのコードをもう少し教えてもらえますか?どのようにコードなどを出力していますか? – Jicao

+0

なぜそれを交換する必要がありますか? &有効なXML文字ではありません& – SaggingRufus

+0

私はWPのすべてのインポートでこのXMLをインポートするつもりで、これを変更するかどうかわかりませんので、置き換えたい – Jan

答えて

0

このコードは何も問題はありません

$string= str_replace("&amp;", ' & ', $string); 

はあなたがXMLを格納していることを確認しています$ string変数の文字列? もっとコードを教えてもらえますか?

+0

私は完全に確信しています。私は他の交換品をたくさん持っていて、彼らはうまく動作します! (&置換の下の同じ機能で) そして、私はそれを正しく保存します: $ word = $ marker-> item($ i) - > textContent; $ escapedWord = escapWord($ word); – Jan

0

マイコード:

関数loadTitles($ tagNameを、$パス){

$dom = new DOMDocument('1.0', 'utf-8'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->load($path); 

$marker = $dom->getElementsByTagName($tagName); 

for ($i = $marker->length - 1; $i >= 0; $i--) { 
    $word = $marker->item($i)->textContent; 
    $escapedWord = escapWord($word); 
    $marker->item($i)->textContent = $escapedWord; 
} 

$dom->saveXML(); 
$dom->save($path); 
} 


function escapWord($string){ 

    $replaceNothing = [":", ",", ";", "`", "#", "'", "´", "–", "!", "(", ")", ".", "@", "’", "+", "™"]; 
    $replaceSpace = ["-", "–", "_", "/"]; 
    $delete = ["Steam", "Eu", "Key"]; 

    $string= str_replace("&amp;", ' & ', $string); 

return $string; 
0

&amp;が含まれているレキシカルXMLが表示されていますが、コードでDOMが処理されています。 DOMはおそらく字句XMLを解析した結果であり、パーサーが行うのは&amp;&に置き換えることです。それはあなたが自分でする必要があるものではありません。

DOMをレキシカルXMLとしてシリアライズ/保存すると、プロセスは逆になり、&&amp;に置き換えられます。シリアライザがそれをしなかった場合、結果のXMLは不正な形式になります。

関連する問題