2010-10-11 48 views
2

對於Web應用程序,我們需要鏈接到一些用戶生成的內容。 A用戶輸入標題,例如我們生成SEO友好的URL該產品的產品:如何在PHP中支持UTF8(日文,阿拉伯文,西班牙文,...)URL

這樣

title: a nice product 

www.user.com/product/a-nice-product 

title: أبجد هوز 

www.user.com/product/أبجد هوز 

的問題是,這些外國語言的網址的不支持和瀏覽器拒絕打開這些鏈接。我見過WordPress的設置支持這種類型的網址,所以我想這是可以做到的。

有誰知道我們應該如何支持這個在PHP?

維基百科處理這個問題就好了:http://ar.wikipedia.org

+0

Depends中關於你的意思是「很好」。在我的IE8中,最後一個'/'後的URL顯示爲%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%D8%A7%D9%84%D8%B1 %D8%A6%D9%8A%D8%B3%D9%8A%D8%A9。 – 2010-10-12 16:43:36

回答

6

雖然URL本身只允許US-ASCII字符,你可以use Unicode characters in the URI path,如果你對其進行編碼使用UTF-8,然後通過使用percent-encoding將它們轉換在US-ASCII字符:

一個系統,內部提供以不同字符編碼形式的標識符(例如EBCDIC)通常將在內部接口處執行文本標識符到UTF-8 [或US-ASCII字符編碼的一些其他超集]的字符轉換,從而提供比僅僅對原始八位字節進行百分比編碼所得到的標識符更有意義的標識符。

所以,你可以做這樣的事情(假設UTF-8):

$title = 'أبجد هوز'; 
$path = '/product/'.rawurlencode($title); 
echo $path; // "/product/%D8%A3%D8%A8%D8%AC%D8%AF%20%D9%87%D9%88%D8%B2" 

雖然URI路徑實際上與百分號編碼的編碼,最現代的瀏覽器將顯示此序列代表的字符在使用UTF-8時,在Unicode中。

+0

,但是對於例如/ product /españa使這個/ product/espana代替/ product/espa%F1a? – Jorre 2010-10-12 16:42:48

+0

好東西隊友,謝謝你的幫助! – Jorre 2010-10-12 17:24:24

+0

我確定您檢查了這些網址的複製粘貼能力和書籤功能。根據我的經驗,當您將它們作爲錨點標記或重定向網址提供給瀏覽器時,它們通常會正常工作,但一旦瀏覽器必須自行存儲和檢索URL,所有投注都將關閉。希望你找到解決方案,祝你好運! – BjornS 2010-10-12 19:05:05

0

您可能需要使用IDNA編碼的URL的非ASCII部分。

http://en.wikipedia.org/wiki/Internationalized_domain_name

+1

IDNA僅適用於實際的域名。 URL的其餘部分使用百分比編碼(PHP中的'urlencode()')進行編碼。 – TRiG 2010-10-11 16:39:02

+0

我們可以使用urlencode()來編碼所有非ascii字符嗎? – Jorre 2010-10-11 21:10:13

1

你有麻煩了,我害怕。 URL的編碼由瀏覽器決定。在嘗試支持使用挪威特殊字符的網址時,我遇到了同樣的問題,而且這種情況根本不可能。

您可以將瀏覽器重定向到UTF-8 URL,但它可能會在ISO中回覆您。在某些情況下,瀏覽器(例如firefox)會在同一個URL中混合使用ISO和UTF-8格式(這在發生get參數時尤其會發生)。

我的建議很簡單;不要這樣做,使用英語(更好的SEO!)或拼寫它的發音。

+0

對我來說這不是問題,但我的網絡應用程序的客戶是國際化的,並將使用他們自己的語言標題。 – Jorre 2010-10-11 21:04:46

+0

查看http://ar.wikipedia.org,他們正在處理這個很好,所以我必須有可能? – Jorre 2010-10-12 16:40:09

+0

@Jorre他們以同樣醜陋的urlencoded方式擁有它。它的瀏覽器使它看起來不錯。更好地音譯它 – 2010-10-12 17:24:28

0

你應該做進行urlencode阿拉伯語或Unicode文本

urlencode('كلام-عربي') 

而且其非常重要的字符集代碼添加到頁面的頭部標記,否則該鏈接將無法正常工作

<meta charset="utf-8"> 
相關問題