Gordon cevabı iyi ve XML kodlamak sorunları açıklamak, ancak basit bir fonksiyon (ya da ne yapmak blackbox) göstermez. Jon'un cevabı 'htmlspecialchars'dan' işlevi recomendation ile iyi başlayan, ancak o ve diğerleri bazı hata yapmak, o zaman ben empatik olacaktır.
Dizeleri ve XML veri iyi bir programcı MUST have control about use or not of UTF-8: UTF-8 (veya başka bir ASCII olmayan kodlamak) tutarlı bir algoritma GÜVENLİ IS.
SAFE UTF-8 XML NOT NEED FULL-ENTITY ENCODE. Gelişigüzel kodlar üretmek "ikinci sınıf insan olmayan-readble, kodlama / kod çözme-talep, XML". Tüm içerik ASCII olduğunda ve güvenli ASCII XML, ayrıca, varlık kodlamak gerek.
Only 3 or 4 characters need to be escaped in a string of XML content: >
, <
, &
, and optional "
.
Please read http://www.w3.org/TR/REC-xml/ "2.4 Character Data and Markup" and "4.6 Predefined Entities". THEN YOU can use 'htmlentities'
Örnek için, aşağıdaki PHP işlevi XML tamamen güvenli hale getirecek:
// it is a didactic illustration, USE htmlentities($S,flag)
function xmlsafe($s,$intoQuotes=0) {
if ($intoQuotes)
return str_replace(array('&','>','<','"'), array('&','>','<','"'), $s);
// SAME AS htmlspecialchars($s)
else
return str_replace(array('&','>','<'), array('&','>','<'), $s);
// SAME AS htmlspecialchars($s,ENT_NOQUOTES)
}
// example of SAFE XML CONSTRUCTION
function xmlTag( $element, $attribs, $contents = NULL) {
$out = '<' . $element;
foreach( $attribs as $name => $val )
$out .= ' '.$name.'="'. xmlsafe( $val,1 ) .'"';
if ( $contents==='' || is_null($contents) )
$out .= '/>';
else
$out .= '>'.xmlsafe( $contents )."</$element>";
return $out;
}
Bir CDATA bloğunda, CDATA gelişigüzel kullanımını önlemek lütfen, bu işlevi kullanmak gerek ... Ama yok.