2

私は訪問者がどのページにアクセスするかを取得しようとしていました:

これが私のコードです:

$url = $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
$urlcomplete = $url;
$url = explode(".com/",$url);
$urlcount = count($url);
$newurl = '';
for ($start = 1; $start < $urlcount; $start++) {
    if ($newurl != '') {
        $newurl .= '.com/'; 
    }
    $newurl .= $url[$start];    
}
$url = explode('/',$newurl);
$urlcount = explode('?',end($url));
$url[count($url) - 1] = $urlcount[0];
$urlcount = count($url);

上記のコードを使用すると、すべてのサブページが$urlに保存されます。

https://stackoverflow.com/questions/ask

$url[0] = 'questions'
$url[1] = 'ask'

ただ聞きたいのですが、これは良い方法ですか、それとも他にもっと良い方法がありますか?

4

1 に答える 1

2

最初にの前に付けSERVER_NAMEREQUEST_URI、次にそれを分割しようとするのは無意味です。これはもっと簡単な解決策になるはずです:

# first, split off the query string, if any:
list( $path ) = explode( '?', $_SERVER['REQUEST_URI'], 2 );

# then just split the URL path into its components:
$url = explode( '/', ltrim( $path, '/' ) );

はパスから先頭のltrimスラッシュを削除するため、$url[0]空になることはありません。

$urlパスがスラッシュで終わっている場合は、配列の最後に空の要素が残っている可能性があることに注意してください。の代わりにを使用して削除することもできますが、相対URLの解決などでは末尾のスラッシュが重要であるため、削除したくない場合があります。trimltrim

于 2012-12-25T16:45:25.073 に答える