我目前正在研究一個從暴雪社區API中提取JSON數據並使用PHP解析它的應用程序。一切都很好,直到我找到一個名字中帶有特殊字符的角色。特殊字符與網址重寫
爲了拉動角色數據,我需要知道他們的角色名稱和領域。
我有通過URL傳遞到角色頁面的名稱和領域,並從那裏使用該信息來提取角色數據。
在這一點上我的網址是像這樣:
http://localhost/guildtree/characters.php?realm=argent-dawn&name=Ankzu
在這一點上,如果我嘗試提取數據用於與口音我得到重新定向到我的錯誤頁面字符,因爲它不是一個有效的字符。
直到我開始URL重寫,我發現我的問題。我正在被重新定向到我的錯誤頁面,因爲沿着特定字符的某個位置正在替換一些非常奇怪的字符。
與我的新的URL重寫後續工作:
http://localhost/guildtree/argent-dawn/ankzu
然而,隨着錯誤消息在他們的名字結果的特殊字符的字符。
http://localhost/guildtree/argent-dawn/notúk
導致以下錯誤信息:
「沒有找到
所請求的網址/ guildtree /銀色黎明/notúk在此服務器上找到」
正如你可以看到U是被取代ú,但是當我複製並粘貼URL將U顯示爲%C3%BA
這是我的理解是,之所以U是表現爲ú是因爲兩個字節的unicodeú被壓縮成兩個一個字節的ASCII字符,導致正在顯示ú。
我已經確保了我所有的頁面都在標題下面:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
爲了讓我的應用程序正常工作,我需要這些特殊字符能正確顯示,所以我需要在U實際顯示如ú,不顯示爲ú但實際上是ú或%C3%BA。
中的人物的名字被從URL中拉簡稱爲:
$charName = $_GET['name'];
是否有可能進行編碼$ CHARNAME正確顯示特殊字符?
我已經嘗試了所有我能想到並在Google上搜索過的東西,但都沒有成功。
此外,因爲我正在使用URL重寫重寫規則是什麼,以允許這些特殊字符?
這是我目前的重寫規則:
RewriteRule ^([a-zA-Z0-9_'-]+)/([a-zA-Z]+)$ characters.php?realm=$1&name=$2 [NC]
我知道,([A-ZA-Z] +)不允許在所有的特殊字符,我現在一直在努力獲取特殊字符正確顯示。如果我使用([a-zA-Z \ú] +),它將工作並顯示需要顯示的頁面。將規則添加到規則中似乎是一種非常糟糕的方法,並且在爲重音字符使用相應字符時並不總是有效。
任何幫助將不勝感激。如果您需要更多信息,請詢問。
編輯:
更改我的重寫規則,下面的允許信息被拉到罰款,但創造了我的CSS重定向循環。
RewriteRule ^([a-zA-Z0-9_'-]+)/([^/]+)$ characters.php?realm=$1&name=$2 [NC]
例如我的CSS被重定向到
http://localhost/guildtree/css/error
,而不是
http://localhost/guildtree/css/style2.css
更新:
通過一些簡單的測試:
$charName = $_GET['name'];
$charNameTEST = utf8_encode($charName);
會做出改變,但是當我將此到我的網頁仍出現說:
「未找到
請求的URL/guildtree /銀色黎明/notúk在此服務器上找到「。
我認爲現在的主要問題是URL重定向,因爲JSON數據在具有重音字符時可以很好地解析。我只是不明白爲什麼它會一直向我展示它在瀏覽器欄中的guildtree/argent-dawn /notúk上,但不斷嘗試拉起/ guildtree/argent-dawn /notúk。
當有人直接輸入網址時怎麼辦? – akari
您可能還想考慮ASCII用戶名。 'example.com/guildtree/argent-dawn/notuk /'而不是'example.com/guildtree/argent-dawn/not%C3%BAk'。您的用戶可能會覺得更容易。 –
example.com/guildtree/argent-dawn/notuk和example.com/guildtree/argent-dawn/notúk雖然會提取兩組完全不同的數據,但角色名稱必須精確。 – akari