번거로운 문자가 포함될 수있는 문자열 (예 : &, <)을 추가하면 DOMDocument는 문자열을 살균하는 대신 경고를 발생시킵니다.PHP DOMDocument : 요소에 텍스트를 안전하게 추가하는 가장 좋은 방법은 무엇입니까
문자열을 xml- 안전하게 만드는 간결한 방법을 찾고 있습니다. 이상적으로는 DOMDocument 라이브러리를 활용하는 것이 이상적입니다.
나는 preg_replace
또는 htmlspecialchars
보다 나은 것을 찾고 있습니다. DOMDocument::createTextNode()
이 표시되지만 결과 DOMText 개체가 번거로워서 DOMDocument::createElement()
으로 넘길 수 없습니다.
<?php
$dom = new DOMDocument;
$dom->formatOutput = true;
$parent = $dom->createElement('rootNode');
$parent->appendChild($dom->createElement('name', 'this ampersand causes pain & sorrow '));
$dom->appendChild($parent);
echo $dom->saveXml();
이 결과를 생성 (eval.in 참조)
Warning: DOMDocument::createElement(): unterminated entity reference sorrow in /tmp/execpad-41ee778d3376/source-41ee778d3376 on line 6
<?xml version="1.0"?>
<rootNode>
<name>this ampersand causes pain </name>
</rootNode>
"preg_replace이다 또는 반드시 htmlspecialchars보다 더 나은"- 어떤면에서 더 나은? – bobdye
preg_replace 및 htmlspecialchars는 광역 스펙트럼 도구입니다. preg_replace 접근법은 XML 문자 문제에 대한 개발자의 지식에 완전히 의존합니다. htmlspecialcharacters 접근법은 논쟁의 여지가 있습니다 (http://stackoverflow.com/questions/2822774/php-is-htmlentities-sufficient-for-creating-xml-safe-values). 그리고이 문제는 XML에 특유한 것이므로 XML 라이브러리가이를 처리 할 수있는 명확한 방법을 제공 할 것으로 기대합니다. – doub1ejack