php - 在 PHP 中生成 XML 文档(转义字符)

标签 php xml

我正在从 PHP 脚本生成 XML 文档,我需要转义 XML 特殊字符。 我知道应该转义的字符列表;但是正确的方法是什么?

字符应该只用反斜杠(\')转义还是正确的方法是什么? 是否有任何内置的 PHP 函数可以为我处理这个问题?

最佳答案

我创建了使用 five "predefined entities" 转义的简单函数在 XML 中:

function xml_entities($string) {
    return strtr(
        $string, 
        array(
            "<" => "&lt;",
            ">" => "&gt;",
            '"' => "&quot;",
            "'" => "&apos;",
            "&" => "&amp;",
        )
    );
}

使用示例 Demo :

$text = "Test &amp; <b> and encode </b> :)";
echo xml_entities($text);

输出:

Test &amp;amp; &lt;b&gt; and encode &lt;/b&gt; :)

使用 str_replace 可以达到类似的效果,但由于双重替换,它很脆弱(未经测试,不推荐):

function xml_entities($string) {
    return str_replace(
        array("&",     "<",    ">",    '"',      "'"),
        array("&amp;", "&lt;", "&gt;", "&quot;", "&apos;"), 
        $string
    );
}

关于php - 在 PHP 中生成 XML 文档(转义字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3957360/

相关文章:

php - “node”不被识别为内部或外部命令、可操作程序或批处理文件。 - 浏览器截图

PHP registerXPathNamespace() 错误

xml - Perl LibXML 打印额外的 "text"标签

c# - 使用不同的根元素名称反序列化

php - 如何在 PHP 中获取有用的错误消息?

php - 简短的 php/mysql 查询删除两个表选择的位置

php - 如何使用对 PHP 页面使用自定义用户名验证的 WCF Web 服务?

php - 如何使用 PHP 来使用 AngularJs $stateChangeSuccess 将数据填充到 MySQL?

C# XML - 读取包含的 XML 文档

xml - 使用XQuery将十进制xml转换为带2个小数点的十进制