【问题标题】:Strophe character encoding issueStrophe字符编码问题
【发布时间】:2012-02-27 03:11:58
【问题描述】:

我正在开发 XMPP 客户端,但遇到Strophe(javascript 版本)发送/接收消息的问题。

问题在于包含“特殊”字符的消息。例如,如果我发送:

我来了。

将显示一个外部客户端(即 iChat)

我在这里。

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>

提前感谢您的帮助。

编辑:

Outbound,Strophe 似乎是双重编码。当我输入时

我是

正在发送

<body>I&amp;apos;m</body>

入站,它似乎没有正确处理 CDATA。任何指导或想法表示赞赏。

【问题讨论】:

  • 能不能看一下js发过来的数据,看看这个转换是strophe.js做的还是服务端做的?
  • 我现在正在研究这个...将更新问题
  • 一个“想法”:记住&amp;apos; 在消息从 XML 到 HTML 时无效 - 它只是 XML 中的有效实体(与 &amp;#39; 不同) - 这很可能为什么一些基于 HTML 的客户端根本不会显示它。
  • @jopke 它正在进行 XML 转义。 Function: xmlescape Excapes invalid xml characters.js文件非最小化版本第822行。
  • @jopke 是的,我明白了。一般来说,它假设服务器应该将字符串反序列化,改变 html 实体。是你的服务器吗?您可以修改 js 文件,防止第二次转义,但我不知道在这种情况下 XML 结构的有效性如何。去除非最小化 js 文件第 1163 行的转义。

标签: javascript xmpp strophe


【解决方案1】:

好的,基于

https://github.com/metajack/strophejs/issues/54

https://github.com/metajack/strophejs/pull/59

您应该删除文本节点的转义。打开非最小化版本的 strophe.js 文件和注释行 #846

//text = Strophe.xmlescape(text);

【讨论】:

    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2011-01-30
    • 2010-10-23
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多