web-dev-qa-db-ja.com

PHP文字列内の文字が最後に出現した後の文字を削除します

したがって、テストケース文字列は次のようになります。

http://example.com/?u=ben

または

http://example.com

「/」が最後に出現した後、すべてを削除しようとしていますが、「http://」の一部でない場合のみです。これは可能ですか?

私はこれをこれまでに持っています:

$url = substr($url, 0, strpos( $url, '/'));

しかし、機能しません。最初の '/'の後にすべてを取り除きます。

25
benhowdle89

このタイプのジョブ用に設計されたツール parse_url を使用する必要があります

url.php

<?php

$urls = array('http://example.com/foo?u=ben',
                'http://example.com/foo/bar/?u=ben',
                'http://example.com/foo/bar/baz?u=ben',
                'https://foo.example.com/foo/bar/baz?u=ben',
            );


function clean_url($url) {
    $parts = parse_url($url);
    return $parts['scheme'] . '://' . $parts['Host'] . $parts['path'];
}

foreach ($urls as $url) {
    echo clean_url($url) . "\n";
}

例:

·> php url.php                                                                                                 
http://example.com/foo
http://example.com/foo/bar/
http://example.com/foo/bar/baz
https://foo.example.com/foo/bar/baz
14
sberry

Strposではなくstrrpos関数を使用する必要があります;-)

substr($url, 0, strrpos( $url, '/'));
89
user2422121

実際には、PHPのいくつかの文字列操作関数を操作することで、より簡単に解決できます。

まず、最後に出現する「/」の位置を見つける必要があります。これを行うには、strrpos()関数を使用します(2 rを使用する場合に注意してください)。

次に、この位置を負の値として、substr()関数の2番目のパラメーターとして指定すると、部分文字列の検索が最後から開始されます。

2番目の問題は、結果として、最後の「/」のLEFTにある文字列の一部が必要になることです。これを実現するには、削除する文字数を示す3番目のパラメーターに負の値をsubstr()に指定する必要があります。

削除する必要があるパラメーターの数を確認するには、最初に「/」の右側で文字列部分を抽出し、次にその長さを数える必要があります。

//so given this url:
$current_url = 'http://example.com/firstslug/84'

//count how long is the part to be removed
$slug_tbr = substr($current_url, strrpos($current_url, '/')); // '/84'

$slug_length = strlen(slug_tbr); // (3)

/*get the final result by giving a negative value 
to both second and third parameters of substr() */
$back_url = substr($current_url, -strrpos($current_url, '/'), -$slug_length);

//result will be http://example.com/firstslug/
1
Lanci
$cutoff = explode("char", $string); 
echo $cutoff[0]; // 2 for what you want and 3 for the index

また

echo str_replace( "http://"、 ""、$ str);

0
Seb