2

私はこれを機能させようとしています。ルーティングを次のように動作させたい: URL を入力したとき。アクションパラメータで値example.com/api/getpage/http://smth.comを取得したい。このケースのルーティングは、現在次のようになっています。idhttp://smth.com

Route::set('api', 'api/<action>/<id>')
    ->defaults(array(
        'controller' => 'api',
        'action'     => 'index'
    ));

そして、何が行われているのか:

public function action_getpage()
    {
        $obj = $this->scrape($this->request->query('id'));
        $this->response->body(json_encode($obj));
    }

このような URLexample.com/api/getpage?id=http://smth.comは魅力的に機能しますが、私はそのようにしたくありません。その目標を達成する方法はありますか?すべての提案を前もって感謝します。

4

1 に答える 1

2

問題は、URL セグメント内でスラッシュを使用できないことです (get パラメーターを除く)。これは kohana ルーティングとは関係ありませんが、Web サーバーがそれを処理する方法です。それを回避する唯一の方法は、彼のスラッシュを別のものに置き換えることです. また、最終セグメントとして渡す URL の末尾に get パラメータがある場合にも問題が発生します。疑問符があると、最終セグメントではなく、メイン URL の get パラメータとして扱われます。

別のオプションは、最終的な URL セグメントを base64 でエンコードしてから、コントローラー内でデコードすることです。これにより、スラッシュと疑問符が取り除かれます。PHP には、単純な base64_encode および base64_decode 関数があります。唯一の欠点は、URL の一部が任意の文字化けした文字列のように見えることです。 http://php.net/manual/en/function.base64-encode.php

于 2013-01-26T15:43:42.747 に答える