ホーム > フォーラム > 開発 > コア開発 > 関数「redirect_header」

関数「redirect_header」
投稿者: okuhiki | 投稿日時: 2007/4/3 17:14 | 閲覧: 7773回
okuhiki
関数「redirect_header」
/include/functions.php Line 382

症状
引数「$url」に
'http://localhost/user.php#lostpassword'
を与えた場合に、テンプレート変数「$url」は、
'http://localhost/user.php#lostpassword?xoops_redirect=%2Flocalhost%2Fmodules%2Ftest%2Findex.php'
と成る。

引数「$url」に fragment が付記されたアドレスが指定された場合、テンプレート変数「$url」が奇妙な値と成る。

原因
仕様として認められていないと怪察できる、fragment が付記されている。
または、fragment の付記を想定していなかった。
この関数は、XOOPS 期から存在しています。

対策
fragment の付記を行なわない。または、fragment の付記を想定した処理を行なう。

fragment の付記を想定した処理の案
Line 390 - 410 の query 付加の処理前に
if (strstr($url, '#')) {
    $parse_url = parse_url($url);
    $url = $parse_url['scheme'] . '://';
    if (!empty($parse_url['user'])) {
        if (!empty($parse_url['pass'])) {
            $url .= $parse_url['user'] . ':' . $parse_url['pass'] . '@';
        } else {
            $url .= $parse_url['user'] . '@';
        }
    }
    $url .= $parse_url['host'] . $parse_url['path'];
    if (!empty($parse_url['query'])) {
        $url .= '?' . $parse_url['query'];
    }
}
として、fragment 部分を除去そして処理後に、
if (!empty($parse_url['fragment'])) {
    $url .= '#' . $parse_url['fragment'];
}
として、fragment 部分を書き戻すでしょうか。
理解不足にて怪しいスクリプトですが参考になれば。

コメント(0)

新しいものから | 古いものから | ネスト表示 | RSS feed

投票(0)

新しいものから | 古いものから | RSS feed
 
To Top