2015-06-17 49 views
3

使用http_build_query()將陣列編碼爲URL時,當數組鍵也是html-char代碼時會產生奇怪的行爲。使用http_build_query()編碼陣列鍵時

例如:

return http_build_query([ 
    'id' = > ['my', 'data', 'here'], // no problem 
    'class' = > ['my', 'data', 'here'], // no problem 
    'yen' = > ['my', 'data', 'here'], // ¥ html car is ¥ 
    'parameter' = > ['my', 'data', 'here'], // ¶ html char is ¶ 
]); 

和編碼的結果是:

id[0]=my&id[1]=data&id[2]=here&class[0]=my&class[1]=data&class[2]=here¥[0]=my¥[1]=data¥[2]=here¶meter[0]=my¶meter[1]=data¶meter[2]=here

最新這裏發生,它不能是可能的,我不能使用字參數爲一個數組項。

+1

了你在你的瀏覽器中看到,檢查出的'視圖source' – Ghost

+0

我不明白你怎麼代碼可能產生這樣的輸出。請發佈**實際的代碼** – Phil

+0

是啊...鬼是正確的。我覺得很傻... – AndrewMcLagan

回答

1

如果您查看HTML輸出的源代碼,你會看到

ID%5B0%5D =我& ID%5B1%5D =數據& ID%5B2%5D =這裏&類%5B0% 5D =我&類%5B1%5D =數據&類%5B2%5D =這裏&日元%5B0%5D =我&日元%5B1%5D =數據&日元%5B2%5D =這裏&參數%5B0%5D =我的&參數%5B1%5D =數據&參數%5B2%5D =這裏

這是正確的。在僅顯示時,瀏覽器會將格式錯誤的實體(如&yen)解釋爲¥。在服務器端沒有什麼可擔心的。

HTML實體reference

演示:IDEOne

+0

我覺得很蠢...... – AndrewMcLagan

+0

不,不。別。有時這會導致其他問題。這是一個有效的問題。例如,我們不希望&參數被解釋爲¶這是¶。瀏覽器過於有用。 – Drakes