2009-06-24 5 views
1

트위터가 XML 엔티티 참조를 이중 인코딩하는 이유는 무엇입니까?트위터 이중 인코딩 엔티티 참조?

xml entity ref test < & ' 

상태/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 

난 단지 <> 인코딩 된 더블 저스틴의 관찰을 확인했습니다. 첫 번째 줄은 xml repsonse, 두 번째 줄 json입니다.

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

트위터 문서는 "도주 및 HTML 상태의 몸을 인코딩"말한다, 나는 탈출 추측하는 것은 XML 인코딩 <>을 의미한다.

그러나 나는 아직도 그들이 그것을하고있는 이유를 모르겠다. 전체 프로세스에는 웹 페이지가 포함되어 있지 않습니다. 트윗은 url로 인코딩 된 나머지 API를 통해 보내지고 xml 또는 json으로 검색됩니다.

답변

2

텍스트 속성이 준 HTML 인코딩 텍스트 (두 번째 코드는 < 및 > 만 인코딩하여 짹짹에 새 html 요소를 시작하거나 끝내지 않으므로 두 번 코딩 됨). 은 XML이 와이어를 통해 통신을 구문 분석하기 전에 따라서, 당신은 할 것 :

가집니다 다시 인코딩됩니다 해당 문자열 (가 디코딩 될 때, 그래서 여전히 적절한 HTML로 인코딩 된 텍스트입니다)

xml entity ref test &lt; & ' 
그것을 안으로 :

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

당신이 돌아오고있다.

+0

트위터가이를 막을 수있는 방법이 있습니까? 내 상태가 V % C3 % A6rdibevis (덴마크어)라고 해봅시다. 트위터는 V % 25C3 % 25A6rdibevis로이 사실을 받아들입니다! @ # 귀찮았습니다;) –

0

XML 코드를 XML 코드로 사용하는 것처럼 보입니다. XML에서 XML 구문 분석기를 사용할 때 올바른 HTML을 얻을 수 있습니다.

+0

그렇다면 '&'을 '& amp;'으로 이중 인코딩하지 않는 이유는 무엇입니까? ? –

+0

& amp에 &를 인코딩하지 않습니다. 인코딩의 첫 번째 라운드가 실제로 HTML 인코딩이 아니기 때문입니다. 렌더링 된 경우 새 html 요소를 시작/종료하는 문자를 제거하는 것입니다. –

관련 문제