0

CodeIgniterを使用してPHPアプリケーションを構築しています。Let Me Google That For Youこれは、テキスト入力ボックスに文章を書き込んで[送信]をクリックすると、結果を表示するURLに移動するのと似ています。URLは人間が編集でき、比較的単純なものにしたかったのです。私はCodeIgniterのURLルーティングを理解したので、今のところ私のURLは次のようになります。

http://website.com/?q=this+is+a+normal+url

現在の問題は、文に疑問符や円記号などの特殊文字が含まれている場合です。これらは両方とも私の現在の.htaccess書き換えルールを台無しにしており、キャラクターがエンコードされている場合でも発生します。

http://website.com/?q=this+is+a+normal+url? OR
http://website.com/?q=this+is+a+normal+url%3F

動作するのはダブルエンコーディングです。たとえば、疑問符を取り、それをにエンコードするとし%253Fます(ここで、?は%3Fにエンコードされ、%記号は%25にエンコードされます)。このURLは正しく機能します。

http://website.com/?q=this+is+a+normal+url%253F

誰かが私がここで何ができるかについての考えを持っていますか?入力を二重にエンコードする賢い方法はありますか?.htaccessこれを回避するための書き換えルールを作成できますか?私はここで途方に暮れています。これが私が現在みんなに使っている書き換えルールです。

RewriteEngine on
RewriteCond %{QUERY_STRING} ^q=(.*)$
RewriteRule ^(.*)$ /index.php/app/create/%{QUERY_STRING}? [L]

:CodeIgniterが機能する方法は、index/application/function/parameterURLが設定されていることです。現在、関数に完全なクエリ文字列をフィードしています。

4

2 に答える 2

1

Apache 2.2以降を使用している場合は、Bフラグを使用して、後方参照を強制的にエスケープできます。

RewriteCond %{QUERY_STRING} ^q=.*
RewriteRule ^ /index.php/app/create/%0? [L,B]
于 2009-01-25T21:08:40.903 に答える
0

私は通常、このような人間が読めるURLを作成します

$humanReadableUrl= implode("_",preg_split('/\W+/', trim($input), -1, PREG_SPLIT_NO_EMPTY)); 

単語以外の文字を削除し、単語間にアンダースコアを追加します

于 2009-01-25T20:42:18.210 に答える