0

CodeIgniterのURIセグメントシステムで奇妙な問題が発生しました。

私がこのURLを持っているとき:

http://www.mywebsite.com/forums/category_name/forum_name/topic_name ..(はい、名前には2つのドットがあります)

今私はPHPでこれを行います:

$topic = $this->uri->segment(4);
>>> echo $topic: 'topic_name..'

これは完全に機能します。しかし、ここに奇妙なことがあります。次のようにURLに返信を追加すると、次のようになります。

http://www.mywebsite.com/forums/category_name/forum_name/topic_name../reply

ここで、PHPコードを再度実行します。

$topic = $this->uri->segment(4);
>>> echo $topic: 'topic_name '

ご覧のとおり、突然「..」が「」に置き換えられます(1つのスペース、2つでもないのはなぜですか?)。

ドット( "。")の後にセグメントを追加したときに、URIセグメントメソッドが何かをサニタイズする可能性があるかどうかは誰にもわかりません。奇妙なことに、URLの後ろにスペースを入れて手動で修正すると、trim()の後で、CodeIgniterが今回はそれらに触れていないように見える「..」が残っているため、再び機能します。

http://www.mywebsite.com/forums/category_name/forum_name/topic_name..%20/reply

$topic = $this->uri->segment(4);
> echo $topic: 'topic_name.. '
>>> echo trim($topic): 'topic_name..'
4

1 に答える 1

1

以下のURLを参照してください:-

CodeIgniterのURIクラス

URIクラスは、URI文字列から情報を取得するのに役立つ関数を提供します。URIルーティングを使用する場合は、再ルーティングされたセグメントに関する情報を取得することもできます。

http://codeigniter.com/user_guide/libraries/uri.html

これを読む

サーバーが./index.phpを403として使用していることが起こっていると思います。URIに「...」を追加すると、次の2つのいずれかが発生します。

1)ブラウザはフォルダハンドルを変更し、1つまたは2つのディレクトリを上に移動しようとします

2)Apache Webサーバーの場合「(20024)指定されたパスの形式が正しくないか、無効な文字が含まれています」</ p>

urlサフィックス用で、ドットが1つだけ必要な場合を除いて、URIにドットを配置することはお勧めしません。

于 2012-08-05T15:59:15.350 に答える