Próbuję utworzyć kanał dla Google Merchant za pomocą dokumentu php i DOM.
Kanał zawiera tysiące elementów, ale nie sprawdza poprawności, ponieważ istnieje niewielka liczba przypadków (4/5 na 6000+), w których XML jest zniekształcony, na przykład:
<g:product_type>Plantsg:product_type>
Generuję w pętli foreach
//Loop through each plant
foreach($plantList as $plantItem){
//begin item element
$item = $xml->createElement("item");
//Loop through use key as element name and value as data
foreach ($plantItem as $key => $value)
{
//Decode HTML characters, for example "&" becomes &
//to comply with http://www.w3.org/TR/xhtml1/#C_12
$decode = htmlspecialchars_decode($value);
$decode = trim($decode);
if(empty($decode))
continue;
//Create the element
$tag = $xml->createElement($key);
$tag = $item->appendChild($tag);
//Write the field
$text = $xml->createTextNode($decode);
$text = $tag->appendChild($text);
}
$item = $channel->appendChild($item);
}
Oto 3 zniekształcone tagi:
g:adwords_grouping>18</g:adwords_grouping>
form>10 ltr pot</form>
title>Buy Helleborus x nigercors</title>
Zdeformowane znaczniki pojawiają się w różnych miejscach, gdy wprowadzam zmiany do kodu. Zwykle brakuje albo
Odpowiedzi:
1 dla odpowiedzi № 1Dziękujemy wszystkim, którzy próbowali go rozwiązać. Zdeformowane znaczniki zostały umieszczone przez Chrome, gdy napotka problem z kodowaniem.
Widzieć . W tym przypadku otworzył tag, napotkał „ö”, a następnie przewrócił się i nie zamknął tagu.
Nieprawidłowo używam htmlspecialchars_decode, gdy powinienem używać tylko htmlspecialchars, jak wskazuje hakre, ale to zupełnie inny problem.
0 dla odpowiedzi nr 2
Jestem z @aefxx byłoby pomocne, jeśli możeszpodaj kilka wierszy tuż przed i za linią, w której widzisz zniekształcony znacznik otwarcia (wygląda na to, że we wszystkich pokazanych przykładach brakuje tylko jednego znaku w znaczniku otwarcia).