Strophe字符编码问题

7
我正在开发一个XMPP客户端,使用Strophe(JavaScript版本)发送/接收消息时遇到问题。
问题出在包含“特殊”字符的消息上。例如,如果我发送以下消息:

I'm here.

外部客户端(如iChat)将显示:

I&ampaposm here.

而Strophe客户端则根本不显示任何内容。
如果我从iChat向Strophe客户端发送同样的消息,则会正确显示。
以下是我能想到的最基本的示例代码:
<html>
<head>
  <script type='text/javascript' src='strophe.min.js'></script>
  <script type='text/javascript'>
    function onConnect(status) {
        if (status == Strophe.Status.CONNECTED) {
            var message = $msg({to: CONTACT_JID, from: JID, type: 'chat'}).c('body').t("I'm here."); ;
            connection.send(message.tree());
        }
    }
    var connection = new Strophe.Connection('http://bosh.metajack.im:5280/xmpp-httpbind');
    connection.connect(JID, PASS, onConnect);
  </script>
</head>
<body></body>
</html>

感谢您的帮助。
编辑:
出站时,似乎Strophe正在进行双重编码。当我输入“我是”时,
它发送的是
<body>I&amp;apos;m</body>

在输入方面,似乎不能正确处理 CDATA。欢迎提供任何指导或想法。


你能否查看由js发送的数据并检查此转换是由strophe.js还是在服务器端完成的? - Cheery
我现在正在深入研究这个...将会更新问题。 - jopke
一个“想法”:请记住,当消息从XML转换为HTML时,&apos;是无效的 - 它只是XML中有效的实体(与&#39;相反) - 这可能是为什么一些基于HTML的客户端根本不显示它的原因。 - JimmiTh
@jopke 它正在执行XML转义。函数:xmlescape 转义无效的xml字符。非最小化版本的js文件的第822行。 - Cheery
1
@jopke 是的,我看到了。一般来说,服务器应该将字符串反序列化,更改HTML实体。这是你的服务器吗?你可以修改JS文件,防止第二次转义,但我不知道在这种情况下XML结构有多有效。从非最小化JS文件的第1163行中删除转义。 - Cheery
显示剩余11条评论
1个回答

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接