したがって、テストケース文字列は次のようになります。
http://example.com/?u=ben
または
http://example.com
「/」が最後に出現した後、すべてを削除しようとしていますが、「http://」の一部でない場合のみです。これは可能ですか?
私はこれをこれまでに持っています:
$url = substr($url, 0, strpos( $url, '/'));
しかし、機能しません。最初の '/'の後にすべてを取り除きます。
このタイプのジョブ用に設計されたツール 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
Strposではなくstrrpos関数を使用する必要があります;-)
substr($url, 0, strrpos( $url, '/'));
実際には、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/
$cutoff = explode("char", $string);
echo $cutoff[0]; // 2 for what you want and 3 for the index
また
echo str_replace( "http://"、 ""、$ str);