專案更換 Linux 後 $_GET[] 輸入參數被預設為urlencode了? ? ?
Dec 01, 2016 am 12:25 AM
原來
伺服器:Win2003 + IIS 無問題運作正常
本機:Win10 + apache 和 Win10 + nginx 無問題運作正常
現在
計畫最近更換了阿里雲CentOS7.2,nginx1.10.2;出現了問題。
具體問題(項目是ThinkPHP3.2.3寫的)
頁面當中有Form表單用於搜索,搜尋用的get數據,點選按鈕後形成如下URL
<code>/index.php/User/index.html?key=刘</code>
我在控制器中用I('key')(TP封裝的取得輸入變數的方式類似$_GET['key'])的方式取得這個關鍵字,然後進行查詢分頁;頁碼連結產生類似如下URL
<code>/index.php/User/index/key/刘/p/2.html</code>
當點擊上面頁碼連結翻頁的時候:
在本地和原來的伺服器無論怎麼取得這個get過來的key 都是 string "劉"
但是在新的伺服器上,取得到的關鍵字是 string "%e5%88%98"
這就導致了我原本的程式所有帶這種搜尋的都失效了,都不能翻頁。
我嘗試的解決方案
I('key')獲取這個get數據的時候urldecode一下,但是我發現,只能翻一頁,再犯,這key就被又一次的urlencode了,翻多少次就被無限的urlencode
由於不能修改url模式,所以這個方式我也放棄了
為什麼?
Win+IIS Win+nginx 都沒問題,為什麼到linux+nginx會產生這種問題,這到底是我的鍋,還是linux的鍋,還是nginx的鍋求指教。
專案恢復正常很急切,請各位大神幫忙解答
回覆內容:
原來
伺服器:Win2003 + IIS 無問題運作正常
本機:Win10 + apache 和 Win10 + nginx 無問題運作正常
現在
計畫最近更換了阿里雲CentOS7.2,nginx1.10.2;出現了問題。
具體問題(項目是ThinkPHP3.2.3寫的)
頁面當中有Form表單用於搜索,搜索用的get數據,點擊按鈕後形成如下URL
<code>/index.php/User/index.html?key=刘</code>
我在控制器中用I('key')(TP封裝的取得輸入變數的方式類似$_GET['key'])的方式取得這個關鍵字,然後進行查詢分頁;頁碼連結產生類似如下URL
<code>/index.php/User/index/key/刘/p/2.html</code>
當點擊上面頁碼連結翻頁的時候:
在本地和原來的伺服器無論怎麼取得這個get過來的key 都是 string "劉"
但是在新的伺服器上,取得到的關鍵字是 string "%e5%88%98"
這就導致了我原本的程式所有帶這種搜尋的都失效了,都不能翻頁。
我嘗試的解決方案
I('key')獲取這個get數據的時候urldecode一下,但是我發現,只能翻一頁,再犯,這key就被又一次的urlencode了,翻多少次就被無限的urlencode
由於不能修改url模式,所以這個方式我也放棄了
為什麼?
Win+IIS Win+nginx 都沒問題,為什麼到linux+nginx會產生這種問題,這到底是我的鍋,還是linux的鍋,還是nginx的鍋求指教。
專案恢復正常很急切,請各位大神幫忙解答
TP分頁的源碼中產生url的時候有進行urlencode操作
<code>private function url($page){ return str_replace(urlencode('[PAGE]'), $page, $this->url); }</code>
解決方法 可以在實例化分頁類別的時候把搜尋參數當作第三個參數傳入 具體可查看Page類別的建構方法

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發
