PHPを使用して現在のページのURLを作成しています。時々、次の形式のURL
www.mydomian.com/myurl.html?unwantedthngs
要求されます。 ?
とそれに続くすべて(クエリ文字列)を削除して、結果のURLが次のようになるようにします。
www.mydomain.com/myurl.html
私の現在のコードはこれです:
<?php
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"] . ":" .
$_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
return $pageURL;
}
?>
strtok
name__を使用して、最初に?
が発生する前に文字列を取得できます。
$url=strtok($_SERVER["REQUEST_URI"],'?');
PHP Manual-parse_url() を使用して、必要な部分を取得します。
編集(@Navi Gamageの使用例)
次のように使用できます。
<?php
function reconstruct_url($url){
$url_parts = parse_url($url);
$constructed_url = $url_parts['scheme'] . '://' . $url_parts['Host'] . $url_parts['path'];
return $constructed_url;
}
?>
編集(2番目の完全な例):
スキームが添付され、通知メッセージが表示されないことを確認するために、関数が更新されました。
function reconstruct_url($url){
$url_parts = parse_url($url);
$constructed_url = $url_parts['scheme'] . '://' . $url_parts['Host'] . (isset($url_parts['path'])?$url_parts['path']:'');
return $constructed_url;
}
$test = array(
'http://www.mydomian.com/myurl.html?unwan=abc',
'http://www.mydomian.com/myurl.html',
'http://www.mydomian.com',
'https://mydomian.com/myurl.html?unwan=abc&ab=1'
);
foreach($test as $url){
print_r(parse_url($url));
}
戻ります:
Array
(
[scheme] => http
[Host] => www.mydomian.com
[path] => /myurl.html
[query] => unwan=abc
)
Array
(
[scheme] => http
[Host] => www.mydomian.com
[path] => /myurl.html
)
Array
(
[scheme] => http
[Host] => www.mydomian.com
)
Array
(
[path] => mydomian.com/myurl.html
[query] => unwan=abc&ab=1
)
これは、2番目のパラメーターなしでparse_url()を介してサンプルURLを渡すことによる出力です(説明のみ)。
これは、次を使用してurlを構築した後の最終出力です。
foreach($test as $url){
echo reconstruct_url($url) . '<br/>';
}
出力:
http://www.mydomian.com/myurl.html
http://www.mydomian.com/myurl.html
http://www.mydomian.com
https://mydomian.com/myurl.html
最適なソリューション:
echo parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
同じドメインにフォームを送信する場合、 http://domain.com を含める必要はありません。
$val = substr( $url, 0, strrpos( $url, "?"));
最も簡単な方法
$url = 'https://www.youtube.com/embed/ROipDjNYK4k?rel=0&autoplay=1';
$url_arr = parse_url($url);
$query = $url_arr['query'];
print $url = str_replace(array($query,'?'), '', $url);
//output
https://www.youtube.com/embed/ROipDjNYK4k
ある行で変数に爆発し、次の行で連結することなくこのソリューションを実装するには、少なくともPHPバージョン5.4が必要ですが、簡単なライナーは次のようになります。
$_SERVER["HTTP_Host"].explode('?', $_SERVER["REQUEST_URI"], 2)[0];
サーバー変数: http://php.net/manual/en/reserved.variables.server.php
配列の参照解除: https://wiki.php.net/rfc/functionarraydereferencing
リクエストパスを取得する場合( 詳細 ):
echo parse_url($_SERVER["REQUEST_URI"])['path']
クエリを削除する場合(および場合によってはフラグメントも):
function strposa($haystack, $needles=array(), $offset=0) {
$chr = array();
foreach($needles as $needle) {
$res = strpos($haystack, $needle, $offset);
if ($res !== false) $chr[$needle] = $res;
}
if(empty($chr)) return false;
return min($chr);
}
$i = strposa($_SERVER["REQUEST_URI"], ['#', '?']);
echo strrpos($_SERVER["REQUEST_URI"], 0, $i);
あなたが試すことができます:
<?php
$this_page = basename($_SERVER['REQUEST_URI']);
if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page));
?>
リクエストURIからクエリ文字列を削除するには、クエリ文字列を空の文字列に置き換えます。
function request_uri_without_query() {
$result = $_SERVER['REQUEST_URI'];
$query = $_SERVER['QUERY_STRING'];
if(!empty($query)) {
$result = str_replace('?' . $query, '', $result);
}
return $result;
}
相対URLと絶対URLの両方を扱うため、以下のコードのようにveritasのソリューションを更新しました。
ここで自分で試すことができます: https://ideone.com/PvpZ4J
function removeQueryStringFromUrl($url) {
if (substr($url,0,4) == "http") {
$urlPartsArray = parse_url($url);
$outputUrl = $urlPartsArray['scheme'] . '://' . $urlPartsArray['Host'] . ( isset($urlPartsArray['path']) ? $urlPartsArray['path'] : '' );
} else {
$URLexploded = explode("?", $url, 2);
$outputUrl = $URLexploded[0];
}
return $outputUrl;
}
php手動コメント に従って以下を使用することもできます
$_SERVER['REDIRECT_URL']
これは特定のPHP環境でのみ機能することに注意してください。詳細については、そのページの以下のコメントに従ってください。
目的:現在のPHPファイルのURLパス名。path-infoはN/Aであり、URLクエリ文字列は含まれません。先頭のスラッシュを含みます。
警告:これはURLが書き換えられる前です(つまり、元の呼び出しURLによる)。
警告:すべてのPHP環境で設定されているわけではなく、URLが書き換えられている環境でのみ設定されています。
Webモードで動作:はい
CLIモードで動作:いいえ
これを試して
$url_with_querystring = 'www.mydomian.com/myurl.html?unwantedthngs';
$url_data = parse_url($url_with_querystring);
$url_without_querystring = str_replace('?'.$url_data['query'], '', $url_with_querystring);
次のような関数でparse_urlビルドを使用できます。
$baseUrl = $_SERVER['SERVER_NAME'] . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);