2016-11-14 9 views
0

私はURLにプラス記号を付けようとしていますが、404ページで終わります。私はこのようなURLを一致させようとしています:page/page + + with spacesYii2 Url ManagerでURL​​にプラス(+)を付ける

「ページ+ with +スペース」はスラッグです。

これは私が設定して持っているものです。

'urlManager' => [ 
     'class'   => 'yii\web\UrlManager', 
     'enablePrettyUrl' => true, 
     'showScriptName' => false, 
     'rules'   => [ 
      'page/<slug:[a-zA-Z\+\-]+>' => 'page/view', 
     ], 
    ], 
+0

'+'がPHPに '%2B'として渡されていないかどうかはわかりません。 URLに '+'を使わない方がずっと安全です。 [this](http://stackoverflow.com/q/1634271/3364821)と[this](http://stackoverflow.com/q/1005676/3364821)の質問を参照してください。 – Bizley

答えて

2

プラス記号がURLにスペースをエンコードする方法の一つです。 URLがUrlManagerのルールに渡されるまでには、it has already been decoded

ブラウザでhttp://example.com/page/page+with+spacesを開くと、ルールに渡される文字列は実際には/page/page with spacesのようになります。

これは必要な場合とそうでない場合があります。同じURLはhttp://example.com/page/page%20with%20spacesと表現できますが、これは現代のブラウザでは通常そうです。

http://example.com/page/page+with+spacesに応答していくつかのページを提供したい場合は、有効な文字のリストにスラッグを追加してください:'page/<slug:[a-zA-Z \-]+>'とし、スラッグをpage with spacesに設定してください。

更新: はどうやら、+はURLのクエリコンポーネントに空白文字のための有効なエンコーディングで、(あなたがそれを使用しようとしている)パスコンポーネントで文字通り扱われるべきです。しかし、私はこれを今試しましたが、プラスはですyii\web\Requestのスペースに置き換えられますので、私の提案はうまくいくでしょう。

私の助言は、技術的に有効であっても、URLのプラスを避けることです。

+0

ありがとうございました、スペースを入れたスラグに私の意図を許してください。 – Clearasil

関連する問題