2013-08-28 1 views
0

PHP 문서 DOM을 작성하기 위해 PHP DOM을 사용하고 있습니다. 문서의 끝에서 HTML 엔티티가있는 PHP DOM 및 JavaScript

, 나는 스크립트 요소를 만들 수 있습니다.

스크립트에 임의의 엔터티, 구체적으로 < 및>가 있으면 & lt; 및 & gt; 분명히

이되는 문제 나

만 스크립트 태그에서이 문제를 방지하기 위해 비 hackish 방법 (즉, NOT 문자열 교체) 거기 (또는 내 경우에는 정규식 등에서 특정 요소를 뽑아 오기) 이러한 문자가 포함 된 문자열이 있다면?

+0

(http://stackoverflow.com/a/18487888/367456가)이 정상적으로 작동한다. 다음은 여러 PHP 및 libxml 버전에 대한 온라인 데모입니다. http://3v4l.org/ntvAh - 그리고이 기사를 읽는 것이 좋습니다. [스크립트 태그 내에서 CDATA 섹션이 필요한 경우는 언제입니까?] (http : // stackoverflow .com/q/66837/367456)/[4.8. 스크립트 및 스타일 요소 - XHTML 1.0] (http://www.w3.org/TR/xhtml1/#h-4.8) – hakre

+0

스크립트 요소의 내용을 CDATA 섹션으로 추가해야하는 것처럼 보입니다. – Pez

+0

제 대답에 CDATA 예제 XML/HTML 하이브리드 코드를 추가했습니다. DOMDocument는 출력 할 때마다 아주 똑똑합니다. 이를 염두에두고 직접 CDATA를 삽입하면 나중에 쉽게 변경할 수 있습니다. – hakre

답변

2

일반적으로 문제가되지 않습니다. DOMDocument::saveXML()을 사용하는 경우 해당 문자는 &lt; 또는 &gt;으로 인코딩됩니다. DOMDocument::saveHTML()을 사용하는 경우 태그에있는 문자는 <>입니다.

예 :

<?php 
/** 
* PHP DOM and JavaScript with HTML entities 
* 
* @link http://stackoverflow.com/q/18487515/367456 
*/ 

$doc = new DOMDocument("1.0"); 
$doc->loadXML('<head/>'); 

$javascriptCode = "\n if (1 < 4) {\n alert(\"hello\");\n }\n"; 

$script = $doc->createElement('script'); 
$script->appendChild($doc->createCDATASection($javascriptCode)); 

$head   = $doc->getElementsByTagName('head')->item(0); 
$scriptInHead = $head->appendChild($script); 

echo 'libxml: ', LIBXML_DOTTED_VERSION, "\n" 
    , "\nXML:\n", $doc->saveXML() 
    , "\nHTML:\n", $doc->saveHTML() 
; 

프로그램 출력 (Demo (Multi-Version)) : 답변 같이]가

libxml: 2.7.8 

XML: 
<?xml version="1.0"?> 
<head><script><![CDATA[ 
    if (1 < 4) { 
    alert("hello"); 
    } 
]]></script></head> 

HTML: 
<head><script> 
    if (1 < 4) { 
    alert("hello"); 
    } 
</script></head> 
+0

건배, 나는 그 부분을 이해하지만, 내가 XHTML을 사용하고 있는데 당신은 아마 알고, saveHTML()는 항상 이 나는 ​​'것을 의미 하는가 (당신이 자기 닫는 태그를 사용 특히 ...) 유효한 XHTML을 생성하지 않습니다 내 HTML 템플릿과 격렬하게 싸워야하고 스크립트로 유효한 XHTML을 생성하려면 saveHTML을 사용해야합니까? – Pez

+0

@Pez : X (HT) ML에서 CDATA 요소를 삽입합니다. 귀하의 질문 아래 내 의견을 참조하십시오. – hakre

+0

@Pez : PHP DOMDocument로 XHTML을 작성하는 방법 *에 대한 질문을 코드에 제공해 주실 수 있습니까? 나는 그것을 보게 될 것입니다. – hakre