2009-12-12 3 views
0

이 코드는 IE가 아닌 다른 브라우저에서도 잘 작동합니다.PHP가 포함 된 XML 코드에 IE가 오류를 발생했습니다.

텍스트 내용에 잘못된 문자가있는 발견 :

echo " 
<item> 
<link>http://www.example.com/showrssdetails.php?id=".$row[recordid]."</link> 
<guid isPermaLink=\"true\">http://www.example.com/showrssdetails.php.php?id=".$row[recordid]."</guid> 
<title>".$row[company]."</title> 
<description><! [CDATA[".$row[desiredcandidate]."]]></description> 
<comments>http://www.example.com/showrssdetails.php.php?id=".$row[recordid]."#Comments</comments> 
</item>"; 

IE는 6 행에 오류가 있습니다. 오류 처리 자원이 끝에서> ''그것은

<![CDATA 

해야

+0

쇼 우리 전체 페이지 – Lazarus

답변

4

http://example.com/job_listing_rssxml.php은 ...하지

<! [CDATA 

그것은을 찾아 '그것을 좋아하지 않는다.

는 또한, '<'와 '>'당신의 PHP 코드 내부 엔티티를 HTML로 ' "'모두를 변경해야 당신은 그것을 이런 식으로 수행해야합니다.

... 
<![CDATA[".htmlspecialchars($row['desiredcandidate'])."]]> 
... 

을 그리고 밖으로 다시 그것을 얻을 이 같은 : 회사는 < 또는 &를 포함 할 수 있습니다

htmlspecialchars_decode($string) 
+0

RKh

+0

내 수정을보세요. 또한 입력을 이스케이프 처리해야합니다. –

2
<title>".$row[company]."</title> 

XML 주입하면 텍스트 Y를 인코딩하는 htmlspecialchars()를 사용합니다. 마크 업에 추가하십시오. (그것은 HTML 경우와 XML에 대한 마찬가지로 잘 작동합니다. htmlentities을, 다른 한편으로는, 할 수 없습니다.) CDATA 섹션에서

<description><! [CDATA[".$row[desiredcandidate]."]]></description> 

길 잃은 공간, 그것은 <![CDATA[ ... ]]>을해야합니다. ]]>은 텍스트 콘텐츠 자체에서는 유효하지 않습니다.

어느 쪽이든, CDATA 섹션은 실제로 도움이되지 않습니다. 값에서 문자열 ]]>이 여전히 well-formedness를 깨뜨리는 것은 당신의 결과를 탈출의 책임으로부터 당신을 면제하지 않습니다. CDATA 섹션은 손으로 직접 작성하는 편리함을위한 해킹입니다. 일반적으로 기계에서 생성 된 XML에 넣지 마십시오.

<description><?php echo htmlspecialchars($row['desiredcandidate']); ?></description> 

(또는 짧은 이름을 가진 기능을 미리 정의 :

는이 경우 어쨌든 탈출 일부, 당신은 CDATA 잊고 그냥 그것을 정상적인 방법을하는 것이 더 낫다해야 할 점을 감안 같은 h() 너무 많은 입력을 방지하기 위해, 당신을 위해 echo htmlspecialchars을 수행하는)

(참고 :... avoid using bare-word array indices 그것은 미래에 실패 할 수 있습니다, 모호한, 그리고주의 사항을 생성합니다)

관련 문제