我正在做一些需要使用PHP脚本输出xml(utf-8)的东西。它有严格的格式要求,这意味着xml必须格式良好。我知道'htmlspecialchars'逃脱,但我不知道如何确保。是否有一些函数/库可以确保一切都很好?
答案 0 :(得分:3)
答案 1 :(得分:0)
马修答案表明"框架"用于生成XML代码。
如果您只需要简单的函数来处理XML类或执行" XML-translations",这是一个教学示例(用xmlsafe
函数替换htmlspecialchars
函数)。
PS:请记住,安全的UTF-8 XML不需要完整的实体编码,只需要htmlspecialchars ...不要求将所有特殊字符都转换为实体。
只需要在一串XML内容中转义3到4个字符:>
,<
,&
和可选"
。另请参阅XML规范,http://www.w3.org/TR/REC-xml/&#34; 2.4字符数据和标记&#34;和&#34; 4.6预定义实体&#34;。
以下PHP函数将使XML完全安全:
// it is for illustration, use htmlspecialchars($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 ) .'"'; // convert quotes
if ( $contents==='' || is_null($contents) )
$out .= '/>';
else
$out .= '>'.xmlsafe( $contents )."</$element>"; // not convert quotes
return $out;
}
在CDATA块中你不需要使用这个功能......但是,请避免不加区分地使用CDATA。