2011-04-21 115 views
0

我被提供了一組表示URL鏈接的數據。如:"doug'sfood.jpg"PHP撇號跳過了打破鏈接

我一直在數組這些字符串,然後選擇他們隨機顯示它們插入到一個

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

什麼瀏覽器是放出來的是:

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

我試圖取代報價一個PHP逃脫(\')撇號,但這只是過早地結束了報價。

有人可以幫助我嗎?謝謝。

+0

缺少內容類型等。如果沒有這些,就無法真正回答。我的猜測是,鉻正在糾正它是有效的XML(因爲特殊字符不需要轉義) – 2011-04-21 22:08:44

+0

內容類型?它們是.jpg字符串。 $ arr = array(「doug'sFood.jpg」);回聲「」; – kirk 2011-04-21 22:11:27

+0

頁面本身的內容類型以及文檔類型/模式(HTML與XHTML與XML)。 – 2011-04-21 22:12:03

回答

2

我認爲Chrome會自動轉義未正確轉義的字符。

始終使用:

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

相反的:

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

某些字符應始終HTML轉義,例如:)

​​

檢查用htmlspecialchars(urlencode()個功能,例如:

$string = "quote'quote.jpg"; 

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

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

嘗試此...雖然這是什麼的輸出反正所以它不是我想要的。文件的名稱實際上包含一個撇號... – kirk 2011-04-21 22:16:48

+1

如果HTML代碼引用'quote ' quote.jpg',則瀏覽器實際下載'quote'quote.jpg'。爲了生成有效的HTML,總是輸出'quote ' quote.jpg'。瀏覽器在渲染頁面時將'''轉換爲'''。 – Anne 2011-04-21 22:22:02

+0

這工作,並在同一時間打破的東西。也就是說,它確實也是它所需要的,但是我意識到我給出的圖像與兩種方式中的數據集都不匹配。在兩種可能的情況下,一些數據具有撇號,而在另一個位置則相反。我剛剛刪除了撇號,客戶可以處理......謝謝。 – kirk 2011-04-21 22:27:10

0

不管怎樣,打印出的文件名的標籤時,使用urlencode()而不是依賴於HTML逃逸或瀏覽器行爲:

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

這將成爲你的榜樣doug%27sfood.jpg(又名正確的方式來做到這一點)。希望可以通過您的網絡服務器找到它。

+1

可能只是我的偏好,但[htmlentities](http://php.net/htmlentities)在html/xhtml/xml標籤中比'urlencode'更有意義。當我解析標題/重定向時,我會使用urlencode。 – 2011-04-21 22:27:26

+0

非常感謝你,如果你閱讀上面的內容,你會發現我選擇刪除撇號並放棄代碼。 – kirk 2011-04-21 22:27:50

+0

@凱文:其實:**都是**。瀏覽器會在網址中自動編碼非ASCII字符。只需要在QS屬性中正確編組'''''''或'#'。但HTML轉義對於有效的HTML/XHTML同樣是一個要求。 (大多數ASCII的鏈接都沒有這兩個,邊緣情況很少。) – mario 2011-04-21 22:31:01