CakePHP 1.2 で、日本語URLを含むキャッシュができなくなりました。

(1.1ではできていましたが、1.2にバージョンアップするとできなくなりました)

調べてみたところ、対応していなくなったようです。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1760&forum=7
http://74.125.153.132/search?q=cache:O3HYaM9PkAsJ:cakephp.jp/modules/newbb/viewtopic.php%3Ftopic_id%3D1760%26forum%3D7+cakephp+%E6%97%A5%E6%9C%AC%E8%AA%9E+%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5&cd=1&hl=ja&ct=clnk&gl=jp&lr=lang_ja

いろいろといじってみましたが、
日本語URL、たとえばはてなキーワードのような形式にできませんでした。

なんとか実装したいのですが、実装方法のアドバイスお願いします。

回答の条件
  • 1人5回まで
  • 登録:2009/06/30 20:05:27
  • 終了:2009/07/07 20:10:04

回答(0件)

回答はまだありません

  • id:tdoi
    Inflectorのコードも何も確認していないので、コメントで失礼します。
    推測ですが、質問文中のURLのやりとりを見ると、URLにASCII文字以外が入っていた場合に、preg_replaceで対処できず問題となっているようですので、ちゃんとURLエンコードしてあげたURLならば、処理できるんですよね?

    Inflectorを修正することはコストが大きいようですので、基本的には逃げる方向が妥当なのだと思います。

    で、あくまで、アイディアレベルですが、

    本来キャッシュしたい処理(http://example.com/searches/index/・・・)があったとして、
    それを処理するようのPHPスクリプト(例えばですが、app/webroot/encode.php)を用意しておき、
    また、日本語を含む処理用のURL(例えばですが、http://example.com/special/・・・)を決めて、

    mod_rewriteで、/special/・・・で来たリクエストは、encode.phpが処理するようにして、
    encode.phpは、引数を文字コードを解釈した上でURLエンコードして、本来処理したいコントローラへリダイレクトするとかはどうでしょう?

    例えばですが、

    http://example.com/searches/index/日本語

    というのをキャッシュさせて処理したい場合に、ユーザには、

    http://example.com/special/日本語

    とかにアクセスさせると、mod_rewriteによって、

    http://example.com/encode.php?keyword=日本語

    となり、このスクリプトが

    http://example.com/searches/index/<日本語がURLエンコードされたもの>

    とかになってうまくいかないでしょうか?

    こういう形ができるのかどうかもわからないですし、ちょっと複雑にしてしまっている感がありますが。


    何かの参考になれば。
  • id:onigirin
    どうもありがとうございます。

    いろいろ試行錯誤してみたところ、
    url_encodeでデータを渡すことは簡単にできましたが、
    Inflector::slug()が
    「%」を削除するようになっていたりしていました。

    ごり押しで%付きデータにまで出来たのですが、
    キャッシュ生成は可能でも、読み込みや存在確認など、
    他の面の対応ができませんでした。

    Inflector::slug()内で、URLエンコードされたものを
    そのまま返すようにできれば問題解決しそうですが、
    うまくできずに今回は諦めています。

    どうもありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません