【问题标题】:Twitter double encode entity references?Twitter双重编码实体引用?
【发布时间】:2010-11-05 09:01:21
【问题描述】:

为什么 twitter 对 XML 实体引用进行双重编码?

这是一条推文示例:

xml entity ref test < & '

来自 statuses/friends_timeline 的回复:

<status>
  <created_at>Wed Jun 24 00:16:15 +0000 2009</created_at>
  <id>2302770346</id>
  <text>xml entity ref test &amp;lt; &amp; '</text>
  <source>web</source>
  <truncated>false</truncated>

不应该吗

&lt; &amp; &apos;

我做了更多测试,以下是发送更新的 http 帖子中发生的情况:

再闻一闻

发布数据:

authenticity_token=secret_sauce_removed&status=sniff+again+%3C+%26+'&twttr=true&return_rendered_status=true

我已经证实了 Justin 的观察,即只有 是双重编码的。第一行是 xml 响应,第二行是 json。

 <text>&quot; &amp; ' &amp;lt; &amp;gt;</text>
"text":"\" & ' &lt; &gt;"

Twitter 文档说“转义和 HTML 编码的状态正文”,我猜转义意味着 xml 编码 。

但我仍然不明白他们为什么要这样做。整个过程不涉及网页。推文通过 url 编码的其余 API 发送,并以 xml 或 json 形式检索。

【问题讨论】:

    标签: twitter


    【解决方案1】:

    看起来它正在获取 HTML 代码,并将其粘贴在 XML 字段中,因此当您在 XML 上使用 XML 解析器时,您会得到有效的 HTML。

    【讨论】:

    • 那为什么不将'&'双编码为'&amp;' ?
    • 它没有将 & 编码为 &amp;因为第一轮编码并不是真正的 HTML 编码。它只是删除字符,如果呈现,将开始/结束一个新的 html 元素。
    【解决方案2】:

    它是双重编码的,因为 text 属性是准 HTML 编码文本(看起来它们只是编码 ,因此您不会在推文中开始/结束新的 html 元素)。因此,在 XML 解析它以进行网络通信之前,您将拥有:

    xml entity ref test &lt; & '
    

    然后该字符串再次被编码(因此当它被解码时,它仍然是正确的 HTML 编码文本),将其转换为:

    xml entity ref test &amp;lt; &amp; '
    

    你回来了。

    【讨论】:

    • 有没有办法阻止 twitter 这样做?假设我的状态是 V%C3%A6rdibevis(这是丹麦语)。 Twitter 接受它为 V%25C3%25A6rdibevis,这真的很 !@# 烦人 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多