【问题标题】:Trac XML-RPC encoding problems when using phpxmlrpc使用 phpxmlrpc 时跟踪 XML-RPC 编码问题
【发布时间】:2013-08-03 13:30:14
【问题描述】:

我正在使用带有最新 XmlRpcPlugin 的 trac 1.0.1。像这样使用 python 添加票证时,非 ASCII 字符(在此示例中为 ä)会正确插入:

import xmlrpclib
server = xmlrpclib.ServerProxy('https://user:pwd@localhost/trac/login/xmlrpc')
server.ticket.create("Täst", "Täst")

现在我想像这样使用phpxmlrpc 添加一张票:

$client = new xmlrpc_client("https://localhost/trac/xmlrpc");
$client->setCredentials("usr", "pwd", CURLAUTH_BASIC);

$xmlrpc_msg = new xmlrpcmsg('ticket.create', array(new xmlrpcval("Täst"), new xmlrpcval("Täst"));
$xmlrpc_resp = $client->send($xmlrpc_msg);

我现在收到此错误:not well-formed (invalid token): line 6, column 57 并且未插入票证。

$client->request_charset_encoding 设置为UTF-8ISO-8859-1 时,两次都插入票证,但所有非ASCII 字符格式错误。

我怎样才能让它工作?

【问题讨论】:

    标签: xml-rpc trac


    【解决方案1】:

    请注意,众所周知,PHP 存在 Unicode 字符问题。 another SO question 对此进行了更详细的讨论。

    在将字符串传递给 xmlrpc 函数之前,尝试使用 utf8_encode() 函数对字符串进行编码。

    【讨论】:

      【解决方案2】:

      主要问题是:您的示例是否相关,即。您的源字符串是作为 php 源的一部分保存的,还是从其他地方(如数据库)获取的?

      如果它存储在 php 源中,那么您应该确保在保存该文件时控制文本编辑器使用的字符集:

      • 如果你把 php 源保存为 utf8:什么都做
      • 如果您将 php 源代码保存为 latin-1:您可以在字符串上调用 utf8_encode

      完成后,您必须告诉 phpxmlrpc 库您的应用程序内部使用的字符集是 utf8。这不是通过设置$client->request_charset_encoding 来完成的,而是通过设置PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-15
        • 1970-01-01
        • 1970-01-01
        • 2016-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多