« イー・モバイルの基地局建設中コピーHDDの相性問題 on UnixWare »

CakePHPでパラメータにスラッシュが使えない

CakePHPでパラメータにスラッシュが使えない

パーマリンク 2009/03/04 23:45:27 著者: kumaold メール
カテゴリ: 仕事, プログラミング, PHP, CakePHP

アクセス解析の製作中、CakePHPでURLにスラッシュ(/)を含むパラメータの取り扱いに苦労したので書いておきます。


アクセス解析に限らず、URLを扱うような場面ではURLのパラメータにスラッシュを使いたいということがあると思います。

もちろん、urlencode()で%2Fにしてから渡すのは当たり前ですが、それでもCakePHPのコントローラの引数で普通に受け取ることができません。


以下のようなmod_rewriteの問題もありますが、とりあえずそれは抜きにして。

mod_rewriteの「%2F」問題の解決法(ElectronicBrain is eating BreakFast)


どうやら内部処理で初めにurldecode()をしているのか、%2Fもデコードされて通常のスラッシュ(/)と同等となり、区切りがずれてしまうのが原因のようです。

URLのパラメータとしてスラッシュを渡すと処理ができない(cakephp.jp)


通常のGET(?url=....&....)で渡せば解決するのは分かりきったことですが、他に3つほどパラメータを渡す関係でURLが長くなるのも嫌です。

方法としては、$this->params['url']['url']を毎度正規表現で分割する手もありですが、面倒なので極力やりたくありません。

・・・・・・・

そこで仕方なく、スラッシュを置換する方法をとることにしました。

 置換前:www.example.com/hoge/path/
  ↓
 置換後:www.example.com__hoge__path__


別にアンダーバーでなくてもよかったんですが、一番見た目がすっきりするので。

これなら、ファイル名にまず2連アンダーバー(__)が使われることもなく、_で始まるか終わるファイル/ディレクトリ名もまずないので大丈夫かと。


これをビューにエンコード用関数、コンポーネントにデコード用関数を実装することで解決できました。


NO IMAGEスラッシュ自伝 (仮) (単行本)
シンコーミュージック 2009-03-31

type="text/javascript" src="http://www.ad16.jp/socailmedia.php?a=CCBot%2F2.0+%28http%3A%2F%2Fcommoncrawl.org%2Ffaq%2F%29&u=http%3A%2F%2Fkuroutoshikou.blog16.jp%2Findex.php%2F2009%2F03%2F04%2Fcakephpa_sa_a_ca_ia_fa_ia_la_sa_ca_a_ma_" charset="EUC-JP">

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年3月
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

検索

XMLフィード

16ブログ     powered by b2evolution