1

次のシナリオを検討してください。

http://www.example.com/word/hello/単語helloが変数であるにアクセスできるようにしたい。だから私はそれを設定する.htaccessように設定しました。

RewriteEngine On
RewriteRule ^word/(.+)/?$ displayword.php?word=$1 [L]

など.+の記号もフィルタリングしたいので使用しました。?+-.!;:

そして、それに応じて PHP ファイルを設定しました。

<?php
echo $_GET['word'];
?>

これは単なるシナリオであることを忘れないでください。ここで、この URL:http://www.example.com/word/Are you ok?/にアクセスすると、ページに次のように出力されました。

Are you ok

そして、私はその理由を理解できませんでした。しかしその後、クエスチョン マーク記号が URL 変数の開始点であることに気付きました。

上記の例のクエスチョン マークを正しく表示するために、クエスチョン マークを「URL エンコード」する方法はありますか?

4

4 に答える 4

1

.htaccess ファイルについてはよくわかりませんが、PHP スクリプトを変更して、または$_SERVER['PATH_INFO']の代わりに使用することができます。$_GET$_REQUEST

特に、このコメントはあなたを助けるかもしれません。

于 2012-12-03T00:15:06.407 に答える
1

HTTP プロトコルでは、「?」クエリ文字列を URL の残りの部分から分離するため、URL 内で直接使用することはできないと思います。1 つの解決策は、疑問符を にエンコードすること%3Fです。

string urldecode (string $str)次に、文字列をデコードするために使用できます。

他の文字のエンコーディングについては、このURL エンコーディング リファレンスを参照してください。

于 2012-12-03T00:30:23.960 に答える
1

コードを次のように変更します。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+word/([^/]+) [NC]
RewriteRule ^ index.php?word=%1 [L,QSA]

これが機能する理由は、RewriteRule%{REQUEST_URI}が URI、つまり疑問符の前の文字列を取得する場合に機能します?%{THE_REQUEST}、疑問符を含む完全な URL?でも機能するためです。

于 2012-12-03T07:38:51.727 に答える
1

エンコードする必要はありません。これを試してください:

RewriteEngine On
RewriteRule ^word/([a-zA-Z0-9-=_.?]+)/?$ displayword.php?word=$1 [L]

?これは、パラメータおよび に追加するその他の文字に表示されます[group]。ただし、ルールが機能するかどうかはテストしませんでしたが、機能すると思います。問題ないように見えますが、それは問題ではありません。

于 2012-12-03T01:32:49.267 に答える