2011-04-21 2 views
0

URL 링크를 나타내는 일련의 데이터가 제공되었습니다. 예 : "doug'sfood.jpg".PHP 아포스트로피가 깨어진 링크를 벗어났습니다

.

내가 배열이 문자열을 유지하고 크롬 가하고 있습니다 무엇

<img src="doug'sfood.jpg"></img> 

에 삽입 표시 무작위를 선택입니다 :

<img src="doug&#39;sfood.jpg"></img> 

내가 함께 따옴표를 교체 시도 php가 (\') 아포스트로피를 이스케이프했으나 방금 인용구가 끝났습니다.

나를 도와 줄 사람이 있습니까? 감사.

+0

누락 된 콘텐츠 형식 등. 내 생각 엔 크롬이 유효한 XML이되도록 수정했다는 것입니다 (특수 문자는 이스케이프해야하므로) –

+0

콘텐츠 유형? 그들은 .jpg 문자열입니다. $ arr = array ("doug'sFood.jpg"); 에코 ""; – kirk

+0

페이지 자체의 내용 유형과 doctype/mode (HTML 대 XHTML 대 XML). –

답변

2

Chrome은 올바르게 이스케이프되지 않은 문자를 자동으로 이스케이프 처리합니다.

항상 사용

<img src="quote&#39;quote.jpg" alt="" /> 

대신에 :

<img src="quote'quote.jpg" alt="" /> 

특정 문자가 항상 예를 ​​들어, HTML 이스케이프해야합니다) (

' -> &#39; 
& -> &#38; or &amp; 

확인 반드시 htmlspecialcharsurlencode() 개 기능, 예 :

foreach ($img as $href) { 
    print '<img src="' . urlencode($href) . '" />';   
} 

이것은 당신의 예에서 doug%27sfood.jpg 될 것 (일명 : 파일 이름 태그를 인쇄 할 때

어쨌든
$string = "quote'quote.jpg"; 

echo htmlspecialchars($string, ENT_QUOTES); 
// quote&#039;quote.jpg 

echo urlencode($string); 
// quote%27quote.jpg 
+0

이것을 시도해보십시오 ... 이것은 결국 어쨌든 결국 출력됩니다. 파일의 이름에는 실제로 아포스트로피가 포함되어 있습니다 ... – kirk

+1

HTML 코드가'quote ' quote.jpg'를 참조하면 브라우저는 실제로'quote'quote.jpg'를 다운로드합니다. 유효한 HTML을 생성하려면 항상'quote ' quote.jpg'을 출력하십시오. 브라우저는 페이지를 렌더링하는 동안'''을'''로 변환합니다. – Anne

+0

이것은 동시에 일을하고 부러 뜨 렸습니다. 즉, 필요한 부분을 정확히 수행했지만, 주어진 이미지가 두 가지 방식으로 설정된 데이터와 일치하지 않는다는 것을 깨달았습니다.데이터 중 일부는 가능한 경우 아포스트로피와 반대 위치를가집니다. 방금 아포스트로피를 제거했는데 클라이언트가 처리 할 수 ​​있습니다 ... 감사합니다. – kirk

0

, 빠져 나 브라우저의 행동이 아니라 HTML에 의존하지 않고 urlencode()를 사용 올바른 방법). 어떤 희망을 당신의 웹 서버에 의해 찾을 수 있습니다.

+1

내 선호도 일 수도 있지만 [urlencode]보다는 [htmlentities] (http://php.net/htmlentities)가 html/xhtml/xml 태그 내에서 더 의미가 있습니다. 내가 헤더/리다이렉션을 위해 뭔가를 파싱 할 때 urlencode를 사용할 것이다. –

+0

위의 내용을 읽어 주셔서 감사합니다. 아포스트로피를 제거하고 코드를 무시한 것을 보았습니다. – kirk

+0

@ 케빈 : 사실 : ** 둘 다 **. 브라우저는 URL에서 비 ASCII 문자를 자동 인코딩합니다. QS 속성에서'&'와'?'또는'# '을 정확하게 마샬링하기 위해서만 필요합니다. 하지만 HTML 이스케이프는 유효한 HTML/XHTML의 필수 요소입니다. (대부분의 ASCII 링크를 사용하면 두 가지 모두없이 빠져 나갈 수 있습니다. 가장자리 경우는 거의 없습니다.) – mario

관련 문제