1 回答

TA貢獻1863條經驗 獲得超2個贊
請求的 url 不是 urlencoded。
& 字符表示獲取請求中的新參數。
url [questionmark] parametername [equals sign] value [ampersand] parametername [equals sign] value
url?foo=bar&baz=bal
會變成:
$_GET = [
'foo' => 'bar',
'baz' => 'bal'
];
所以同樣的邏輯適用于你的 url company.php?name=Son's.&.clothes,然后在你的情況下你得到
$_GET = [
'name' => 'Son\'s.',
'.clothes' => null,
];
或者如果您的 webserver/php 設置不同,空的 get 變量可能會被刪除。
urlencode()在使用 php 或 javascript 渲染它們之前使用encodeURIComponent()或通過手動編碼/替換&符號%26
company.php?name=Son's.%26.clothes
基于編輯的問題
$url = str_replace('&', '%26', $url);// Here i replaced & with %26
$url = urlencode($url);
刪除第一行。urlencode 會處理這個問題?,F在您正在對 %26 的轉義符號進行 urlencoding。這兩行應該變成:
$url = urlencode($url);
哪個會給
http://localhost/worldsindia/name/Durgesh+Jaiswal+%26+Co
現在你的重寫規則是荒謬的
RewriteRule ^company/([A-Za-z0-9-\s()+/']+) company.php?name=$1 [NC,L]
這將檢查 url 是否以公司一詞開頭。
您的 url 以 worldsinda 開頭
即使它通過將 company 換成 worldsindia 來匹配,那么您的 url 也會變成:
company.php?name=name/Durgesh Jaiswal & Co
這是一個奇怪的獲取請求。但是因為它是重寫規則而不是重定向規則,它再次從頂部輸入到 .htaccessfile 中。
所以你現在擁有的是網址:
company.php?name=name/Durgesh Jaiswal & Co
這會將 & 解釋為參數分隔符,它將刪除第二個參數,因為它是空的。所以你最終得到
array(1) {
["name"]=>
string(21) "name/Durgesh Jaiswal "
}
現在要修復它,您需要修復您的重寫規則
RewriteRule ^company/([A-Za-z0-9-\s()+']+)/([A-Za-z0-9-\s()+']+) company.php?company=$1&name=$2 [NC,L]
在這里,我們設置了基本 url,/company因此 company 之后的任何內容都將被提供給 company.php 文件。任何不是公司的東西都會被喂給別的東西。
現在他得到請求的參數是
array(2) {
["company"]=>
string(11) "worldsindia"
["name"]=>
string(16) "Durgesh Jaiswal "
}
我們仍然沒有 & 號之后的部分,這是因為 Apache 做了一些事情,但主要是因為您的重定向規則中沒有 & 號。
RewriteRule ^company/([A-Za-z0-9-\s()&+']+)/([A-Za-z0-9-\s()+&']+) test.php?company=$1&name=$2 [NE,L]
現在我們結束了:
array(3) {
["company"]=>
string(13) "worldwideinda"
["name"]=>
string(16) "Durgesh Jaiswal "
["Co"]=>
string(0) ""
}
我們可以通過在重寫規則中添加 B 修改器來解決這個問題,閱讀更多信息https://www.gerd-riesselmann.net/development/using-and-path-apache-modrewrite-and-php/
RewriteRule ^company/([A-Za-z0-9-\s()&+']+)/([A-Za-z0-9-\s()+&']+) test.php?company=$1&name=$2 [NE,B,L]
這將導致
array(2) {
["company"]=>
string(13) "worldwideinda"
["name"]=>
string(20) "Durgesh+Jaiswal+&+Co"
}
由于優點,這不是很好看。最好讓 url 編碼用正確的轉義碼 %20 替換它們。你可以用rawurlencode做到這一點
- 1 回答
- 0 關注
- 216 瀏覽
添加回答
舉報