2011-08-22 2 views
2

작동하지 않는 것, 내가이 코드를 발견했습니다SimpleXMLElement ::하는 AddChild는 PrestaShop 버전에 대한 pluggin effiliation에서 특정 문자열

$values->addChild('marque', '<![CDATA['.$product['manufacturer_name'].']]>'); 

$product['manufacturer_name']에, 내가 Cyril & Nathalie Daniel 있고, 출력이 <![CDATA[Cyril입니다,

의 두 번째 인수에는 &을 포함 할 수 있습니까? 제조업체 이름에 htmlentities를 사용해야합니까?

+2

참조하십시오. http://stackoverflow.com/questions/6260224/how-to-write-cdata-using-simplexmlelement – salathe

+0

@salathe 실제로 이것이 올바른 일입니다. 하지만 유료 모듈을 수정하지 않기로 했으므로 신속하게 더러운 수정을 할 수있었습니다. –

+0

확실히 빠르고, 더러운 수정은 여전히 ​​코드를 수정하고 있습니다. 어느 쪽이든, 어떻게해야하는지 알 수 있습니다. – salathe

답변

7

내 문제가 here를 설명 :

참고하는 AddChild이() "<"와 ">"를 탈출하지만, 그것은 에게 앰퍼샌드 "&을 탈출하지 않습니다 ".


솔루션 제안 php.net (를 htmlentities 또는 htmlcspecialchars)이 좋은 것이 아니다, 그래서 내가 무엇을 salathe 함께했다 제안 :

<?php 
class SimpleXMLExtended extends SimpleXMLElement // http://coffeerings.posterous.com/php-simplexml-and-cdata 
{ 
    public function addCData($cdata_text) 
    { 
    $node= dom_import_simplexml($this); 
    $no = $node->ownerDocument; 
    $node->appendChild($no->createCDATASection($cdata_text)); 
    } 
} 

과 대신을

$values->addChild('marque', '<![CDATA['.$product['manufacturer_name'].']]>'); 

사용 :

$values->addChild('marque')->addCData($product['manufacturer_name']); 

출력은 이제 또 다른 가능성은 SimpleXMLElement는 이중 디코딩을하고 기억하는 것입니다 <![CDATA[Cyril & Nathalie Daniel]]>

-1

htmlentities로 제조업체 이름을 외양으로 인코딩해야 할 수 있습니다. 이것은 내가 생각했을 CDATA 태그 내에서 괜찮을 것입니다.

이 시도 :

$values->addChild('marque', '<![CDATA['.htmlentities($product['manufacturer_name']).']]>'); 
1

입니다 - 대신 매핑 &&amp; (단일 디코드)에, 그냥 &amp;amp;&를 매핑 작동하는 것 같다 시작하기. 귀하의 자녀는 XML에서 &amp;으로 끝납니다.