2024 年日本 PHP 研討會

DOMDocument::createCDATASection

(PHP 5, PHP 7, PHP 8)

DOMDocument::createCDATASection建立新的 CDATA 節點

說明

public DOMDocument::createCDATASection(字串 $data): DOMCdataSection|false

這個函式會建立一個新的 DOMCDATASection 類別的實例。這個節點除非被插入 (例如使用 DOMNode::appendChild()),否則不會顯示在文件中。

參數

data

CDATA 的內容。

回傳值

新的 DOMCDATASection,如果發生錯誤則回傳 false

參見

新增筆記

使用者貢獻的筆記 4 則筆記

info at troptoek dot com
16 年前
一個常見的問題似乎是將 JavaScript 新增到 CDATA 中,然後瀏覽器拋出 JavaScript 錯誤。為了確保 JavaScript 能正常運作,在新增 CDATA 時請使用以下程式碼

<?php
/**
* 將字元數據附加到節點,並檢查 JavaScript 節點
*
* @param DOMElement $appendToNode
* @param string $text
*/
function appendCdata($appendToNode, $text)
{
if (
strtolower($appendToNode->nodeName) == 'script') { // JavaScript 的特殊處理
$cm = $appendToNode->ownerDocument->createTextNode("\n//");
$ct = $appendToNode->ownerDocument->createCDATASection("\n" . $text . "\n//");
$appendToNode->appendChild($cm);
$appendToNode->appendChild($ct);
} else {
// 一般 CDATA 節點
$ct = $appendToNode->ownerDocument->createCDATASection($text);
$appendToNode->appendChild($ct);
}
}
?>
結果應該如下

<script type="text/javascript">
//<![CDATA[
function someJsText() {
document.write('Some js with <a href="#">HTML</a> content');
}
//]]></script>
loathsome
17 年前
這是一個函式,它會在來自 SimpleXML 的字串周圍建立一個 CDATA 區段。

<?php
function sxml_cdata($path, $string){
$dom = dom_import_simplexml($path);
$cdata = $dom->ownerDocument->createCDATASection($string);
$dom->appendChild($cdata);
}
?>
Marc info[at]braincast.nl
13 年前
以下是一些程式碼,它接受一個關聯陣列並將其列印為 XML(),但會為每個字串建立 CDATA 區段

<?php
類別 SimpleXMLExtended 繼承 SimpleXMLElement{
公開函式
addCData($string){
$dom = dom_import_simplexml($this);
$cdata = $dom->ownerDocument->createCDATASection($string);
$dom->appendChild($cdata);
}
}
函式
assocArrayToXML($root_element_name,$ar){
$xml = new SimpleXMLExtended("<?xml version=\"1.0\"?><{$root_element_name}></{$root_element_name}>");
$f = create_function('$f,$c,$a','
foreach($a as $k=>$v) {
if(is_array($v)) {
if (!is_numeric($k))$ch=$c->addChild($k);
else $ch = $c->addChild(substr($c->getName(),0,-1));
$f($f,$ch,$v);
} else {
if (is_numeric($v)){ $c->addChild($k, $v);
}else{$n = $c->addChild($k); $n->addCData($v);}
}
}'
);
$f($f,$xml,$ar);
return
$xml->asXML();
}

/* 範例 */
$result = array("title"=>"CDATA 範例");
$result['items'] = array();
$result['items'][] = array('title'=>'一些字串', 'number' => 1);
$result['items'][] = array('title'=>'一些字串', 'number' => 2);
$result['items'][] = array('title'=>'一些字串', 'number' => 3);

echo
assocArrayToXML('result',$result);
?>

可以用更精細的正規表達式來取代 is_numeric 檢查,以確認字串是否真的不安全,但这對我來說已經夠用了。
To Top