0

我正在使用带有最新 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_encodingUTF-8ISO-8859-1时,两次都插入票证,但所有非 ascii 字符格式错误。

我怎样才能得到这个工作?

4

2 回答 2

0

请注意,已知 PHP 存在 Unicode 字符问题。还有另一个 SO question更详细地讨论了这个问题。

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

于 2013-08-16T23:47:06.337 回答
0

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

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

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

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

于 2017-11-24T00:20:12.163 回答