我正在使用支付网关通过 CURL 发送 xml。使用 XML 验证器时出现以下错误:
XML 文档中的错误:引用了实体“auml”,但未声明。
所以我知道问题出在 ä,但是我不确定如何使用 PHP 解决这个问题。
这是我传递的 xml 请求:
<request type='payer-new' timestamp='XXXXXX'>
<merchantid>XXXXXXXXX</merchantid>
<orderid>XXXXXXXXX</orderid>
<payer type='Business' ref='XXXXXXXXXXXXX'>
<firstname>Xäxxxx</firstname>
<surname>xäxxxxxx</surname>
<address>
<line1>XXXXXXXXXXXXX</line1>
<line2>XXXXXXXXXXXXX</line2>
<city>XXXXXXXXXXXXXXXX</city>
<postcode>XXXXXXXXXXXX</postcode>
<country code='FI'>Finland</country>
</address>
<phonenumbers>
<home>XXXXXXXXXXXXXXXXXXXXXXXXX</home>
</phonenumbers>
<email>XXXXXXXXXXXXXXXXXXXXXXXXXXXXX</email>
</payer>
<sha1hash>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</sha1hash>
</request>
Run Code Online (Sandbox Code Playgroud)
我将 htmlentities 包裹在进入请求的所有变量中,如下所示:
".htmlentities($_SESSION['W_CUSTOMER_FIRSTNAME'], ENT_QUOTES, "UTF-8")."
有没有一种方法可以处理包含这些字符的各种字符/名称/地点等?
提前谢谢了
ä 是一个 HTML 实体代码,而不是一个通用的 XML 代码。
通用 XML 仅理解三个命名实体:&,>和<。
如果要使用任何其他命名实体(例如 )ä,则必须在 XML 架构定义中定义这些实体。一些标准化的 XML 方言具有定义命名实体的模式,但大多数没有,如果您没有模式,那么您肯定无法使用任何命名实体。
因此,不要在 XML 中使用命名实体,通常最好使用数字实体。它们采用 的形式Ӓ,其中1234是您想要的字符的字符代码。对于 auml 字符,您需要的代码是ä. 请注意,这些数字实体代码也可以在 HTML 中正常工作。
您可以在此处找到一些更有用的字符代码列表:http : //www.econlib.org/library/asciicodes.html
令人讨厌的是,没有一个标准的 PHP 函数可以生成这些数字 XML 实体。该htmlentities()和html_special_chars()功能都没有合适的,因为它们产生命名实体。所以我们必须自己写。
您需要使用该ord()函数来获取字符代码,但要注意多字节字符。在手册页xmlentities()的注释中实际上对某个函数进行了合理的尝试,您可以尝试一下。不过,我知道存在其他实现。htmlentities()
| 归档时间: |
|
| 查看次数: |
807 次 |
| 最近记录: |