2009-06-24 4 views
1

Warum twittern XML-Entity-Referenzen doppelt codieren?Twitter-Double-Encode-Entity-Referenzen?

Hier ist ein Beispiel Tweet:

xml entity ref test < & ' 

Die Antwort von Status/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> 

sollte es nicht

&lt; &amp; &apos; 

ich, hier haben einige mehr getestet werden, was passiert in der http-Post, um das Update zu senden:

sniff wieder < & '

Post-Daten:

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

Ich habe Justins Beobachtung bestätigt, dass < nur> doppelt codiert ist. Erste Zeile ist die XML-Antwort, 2. Zeile JSON.

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

Twitter Dokumentation sagt: "entkommen und HTML-Status Körper codiert", denke ich entkam bedeutet XML-Codierung <>.

Aber ich verstehe immer noch nicht, warum sie es tun. Keine Webseiten sind in den gesamten Prozess involviert. Der Tweet wird über die Rest-URL-URL gesendet und als xml oder json abgerufen.

Antwort

2

Es ist doppelt codiert, weil die Texteigenschaft quasi HTML Codierter Text ist (sieht so aus, als ob sie nur <und> codieren, so dass Sie kein neues HTML-Element in Ihrem Tweet starten/beenden). Daher muss vor der XML es für die Kommunikation über den Draht parst, dann würden Sie haben:

xml entity ref test &lt; & ' 

Dieser String dann wieder verschlüsselt wird (so dass, wenn es decodiert wird, ist es immer noch die richtige HTML-codierter Text), die dann auch es in die:

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

, dass Sie zurückkommen.

+0

Gibt es eine Möglichkeit, Twitter davon abzuhalten, dies zu tun? Sag, mein Status ist V% C3% A6rdibevis (das ist Dänisch). Twitter akzeptiert dies als V% 25C3% 25A6rdibevis das ist wirklich! @ # Nervig;) –

0

Es sieht so aus, als würde es den HTML-Code nehmen und in einem XML-Feld festhalten. Wenn Sie also Ihren XML-Parser für das XML verwenden, erhalten Sie gültiges HTML.

+0

Dann warum ist es nicht auch Doppelcodierung '&' zu '& amp;' ? –

+0

Es codiert nicht die & & Ampere; weil die erste Runde der Codierung nicht wirklich HTML-Codierung ist. Es werden nur Zeichen entfernt, die, wenn sie gerendert werden, ein neues HTML-Element starten/beenden würden. –