2013-02-13 62 views
0

我想解決外國字符問題,並將它們與數據庫值匹配。在一頁上提交表單urlencodes獲取值,不在另一頁上

我已經設法從數據庫查詢中獲得一個匹配,但我現在遇到了一個不同的問題,只是不知道爲什麼會發生這種情況。

在整個網站的所有頁面上都有一個標題包含,其中包含一個用於搜索該網站的輸入字段。 <form action="/search.php" method="get"><input name="q" type="text" />etc...

我的問題查詢字符串是這樣的grønhøj。當我將這個字符串輸入到主頁上的輸入表單中時,我會通過如下URL訪問搜索頁:search.php?q = gr%F8nh%F8j目前無法正常工作。 但是,如果我然後重新輸入相同的搜索查詢到搜索頁面上的im時,頁面重新加載,除了url現在看起來像這樣:search.php?q =grønhøj哪些工作。

如果生成的url始終保持不變,那麼我沒有問題,但因爲它不一致,所以我不知道如何爲查詢字符串的兩個可能版本提供解決方案。

所以我想我有2個問題。

1)爲什麼在使用完全相同的表單提交字符串時url不會保持不變? 2)我如何操縱url的兩個版本(或停止導致不同url的不同頁面),以便生成的字符串是一致的,而不管我得到哪個版本的url?

更新:我發現了一個函數來檢測utf8編碼Here這讓我轉我如何處理URL字符串取決於哪個網址我得到的版本,所以現在我的主要問題是固定的。

我仍然想知道爲什麼我從不同的頁面中得到2個不同的url變量,即使這個表單在整個網站中是一致的包含。有任何想法嗎?

回答

1

解決此問題的一種方法是始終使用urldecode()對查詢字符串進行解碼,然後再對其再次使用urlencode()。這樣,如果初始查詢字符串被url編碼或解碼,無論如何,它將再次通過解碼和編碼過程,這將導致相同的最終查詢字符串。

手冊 - urlencode

手冊 - urldecode

+0

雖然理論上是有道理的,在我的情況下,它沒有工作。我認爲這是因爲已經urlencoded的字符串是沒有urlencoded的是utf8編碼的,所以當應用urldecode/encode時,得到的字符串每個ø有2%##代碼,而不僅僅是我的第一個例子中的代碼網址。我發現了一個函數來檢測utf8編碼,這使我可以切換如何處理工作的字符串。 – Novocaine 2013-02-13 14:55:51

+0

沒錯,如果你可以檢測到utf-8(或者任何其他的字符集編碼),那麼你幾乎可以走了。它解決了你的問題。作爲擴展,你可以嘗試解碼和再次編碼,以確保你得到一個純粹的urlencoded查詢字符串。但只有在必要的情況下。如果解碼字符集解決了你的問題,那就放在那。 – arijeet 2013-02-13 15:00:59

+0

是的,它似乎現在已經修復,但你的建議確實幫助我發現一個是utf8編碼,另一個不是,所以我會接受你的答案,乾杯。 – Novocaine 2013-02-13 15:06:29

相關問題