【问题标题】:Proper way in PHP to format/escape a string for use in XMLPHP 中格式化/转义字符串以在 XML 中使用的正确方法
【发布时间】:2015-02-07 20:01:00
【问题描述】:

我有许多字段由用户在表单上填写,然后通过 SOAP 发送到 Web 服务。当我构建我的 XML 以传递用户条目时,它通常可以正常工作。但是,在一些 API 失败的情况下,我遇到了一些问题,我知道这与用户输入的字符有关。

是否有适当的方法来转义要通过 XML 发送的字符串?我读过很多关于使用 htmlspecialchars() 的帖子,然后也有很多人说这是不好的做法。我最近也意识到我应该将编码更改为 UTF-8?

我确信我可能会对这篇文章投下反对票,因为我承认我在 XML 方面没有太多专业知识。在这里寻找最佳实践,因此我对该 API 的调用尽可能可靠,并真诚感谢任何指导。

这是 XML sn-p:

//BUILD FIELD DATA
$xmlStr = "<?xml version=\"1.0\" encoding=\"us-ascii\"?>
<record>
<field Name=\"dateCreated\" Text=\"".$DATE_CREATE."\" />
<field Name=\"purpose\" Text=\"".$PURPOSE."\" />
<field Name=\"comments\" Text=\"".$COMMENTS."\" />
<field Name=\"terms\" Text=\"".$TERMS."\" />
</record>";

【问题讨论】:

  • 我没有答案,我只是想说没有人应该因为你缺乏知识而对你投反对票。如果你什么都知道,你就不会在这里。投票应该反映问题的质量和相关性。我也见过几个字符串转义问题,one I asked and answered myself。我根本不是专家,祝你好运!
  • @philtune 谢谢!我衷心感谢!
  • 编码为 UTF-8 是个好主意,尤其是当您要接收多种语言的输入时。
  • 你在哪里验证 PHP 中的输入?

标签: php xml encoding


【解决方案1】:

我建议您考虑使用 XMLWriter 函数来构建 XML 文档。这个关于 XMLWriter 的 PHP 手册页在用户提供的注释部分有一个很好的简单用法示例:http://php.net/manual/en/function.xmlwriter-open-memory.php。如果我没记错的话,XMLWriter 函数会为你转义一些字符。

您还可以考虑使用 CDATA 标记包装 XML 元素的内容,如下所示:

<field Name="purpose"><![CDATA[ Here's < some " crazy !/> characters! ]]></field>

这基本上告诉 XML 不解析 CDATA 标记内的任何内容

您还应该清理您接受的所有用户输入,以确保避免坏人的恶意行为。我建议查看filter_var。它不是防弹的,但它肯定会有所帮助。我在一些代码中使用以下内容来清理我的 PHP 脚本的输入:

function cleanInput($input){
    if(gettype($input) == 'array'){
        foreach($input as $key => &$val){
            $key = cleanInput($key);
            $val = cleanInput($val);
        }
    }else{
        $input = filter_var(trim($input), FILTER_SANITIZE_SPECIAL_CHARS);
    }
    return $input;
}
$_POST = array_map("cleanInput", $_POST);
$_GET = array_map("cleanInput", $_GET);

希望能帮助您入门。

【讨论】:

  • 这真的帮助了我 - 我真诚地感谢您的帮助!
猜你喜欢
  • 2014-04-27
  • 2011-09-08
  • 2019-08-21
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
相关资源
最近更新 更多