http://
と の間に現れるものを取り除く方法を教えてもらえますか/
? たとえば、http://something/
または単に?http://something.something.something/
に変わります。/
7 に答える
URLを含む長い文字列ではなく、URLを使用していると仮定します...
$path = parse_url($url, PHP_URL_PATH);
を使用することもできますparse_url
が、別のコンポーネントを使用して残りの URL を再構築する必要があります。
$components = parse_url($url);
$result = $components['path'] . '?' .
$components['query'] . '#' .
$components['fragment'];
$url = "http://php.net/manual/en/function.parse-url.php?arg=value#anchor";
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
上記の例では、次のように出力されます。
Array
(
[scheme] => http
[host] => php.net
[path] => /manual/en/function.parse-url.php
[query] => arg=value
[fragment] => anchor
)
を参照してくださいparse-url
PHP_URL_SCHEME、PHP_URL_HOST、PHP_URL_PORT、PHP_URL_USER、PHP_URL_PASS、PHP_URL_PATH、PHP_URL_QUERY、または PHP_URL_FRAGMENT のいずれかを指定して、特定の URL コンポーネントのみを文字列として取得します (ただし、PHP_URL_PORT が指定されている場合は、戻り値は整数になります)。
以下は単に URL のパスを返します。
<?php
$urls = array(
'http://something.com/',
'http://something.something.com/',
'http://something.something.com/some/path',
'http://something.something.com/some/path/?query=string',
'http://something.something.com/some/path/?query=string#with-fragment',
);
foreach ($urls as $url) {
var_dump(parse_url($url, PHP_URL_PATH));
}
#=> string(1) "/"
#=> string(1) "/"
#=> string(10) "/some/path"
#=> string(11) "/some/path/"
#=> string(11) "/some/path/"
URL スキームとホストを URL から取り除きたいだけで、クエリとフラグメントを保持したい場合は、次のように使用できます。
foreach ($urls as $url) {
$url = parse_url($url);
$ret = $url['path'];
if ($url['query']) $ret .= "?{$url[query]}";
if ($url['fragment']) $ret .= "#{$url[fragment]}";
var_dump($ret);
}
#=> string(1) "/"
#=> string(1) "/"
#=> string(10) "/some/path"
#=> string(24) "/some/path/?query=string"
#=> string(38) "/some/path/?query=string#with-fragment"
さらに良いことに、PECL HTTP Extensionを使用している場合は、 http_build_url()メソッドを使用できます。
foreach ($urls as $url) {
$url = http_build_url(array_key_intersect(
parse_url($url),
array_flip(array('path', 'query', 'fragment'))
));
var_dump($url);
}
#=> string(1) "/"
#=> string(1) "/"
#=> string(10) "/some/path"
#=> string(24) "/some/path/?query=string"
#=> string(38) "/some/path/?query=string#with-fragment"
$url = "www.domain.com/sds?test=1&test2=2&test3=3";
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $query_array);
「?」の前は何でも構いません。出力します
array {
'test' => string '1' (length=1)
'test2' => string '2' (length=1)
'test3' => string '3' (length=1)
}
あなたが望むのは$_SERVER['REQUEST_URI']
. または、あなたはそれを得ることができますparse_url()
または、正規表現の使用を主張する場合は、[編集]しないでください。