2017-01-04 3 views
0

У меня проблема. В моем файле XML некоторые значения с именами которых содержит:XML replace & (PHP)

& 

Как я могу заменить его нормальным «&»? Я попробовал это один, но он не работает ....

Это просто имя, так что не имеет значения, если это двойной ecaped или нет ...

<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> 

Мой код, который ISN t t:

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

Поздравления и благодарности!

+0

Не могли бы вы дать нам немного больше своего кода? как вы выводите код и т. д. – Jicao

+0

почему вам нужно его заменить? & не является допустимым символом XML, поэтому он был экранирован с помощью & – SaggingRufus

+0

Я хочу его заменить, потому что я собираюсь импортировать этот XML с WP All Import, и я не знаю, изменит ли это его. – Jan

ответ

0

Там нет ничего плохого с этим кодом

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

Вы уверены, что вы храните XML строка в строковой переменной $? Можете ли вы дать нам больше кода?

+0

Я абсолютно уверен. Я имею в виду, что у меня много других замен, и они отлично работают! (в той же функции ниже & замены. И да, я сохраняю это правильно: $ word = $ marker-> item ($ i) -> textContent; $ escapedWord = escapWord ($ word); – Jan

0

Мой код:

функция loadTitles ($ тэгу, $ путь) {

$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

Вы показываете нам лексический XML, который содержит &amp;, но ваш код обрабатывает DOM. Предполагается, что DOM является результатом анализа лексического XML, и одна из вещей, которую делает синтаксический анализатор, заключается в замене &amp; на &. Это не то, что вам нужно сделать самому.

Когда вы сериализуете/сохраняете DOM как лексический XML, тогда, конечно, процесс отменяется, а & заменяется на &amp;. Если сериализатор этого не сделал, тогда получившийся XML будет плохо сформирован.