0

これはおそらく単純ですが、私は式が得意ではありません。次の文字列を取得しようとしています。

http://www.yoursite.com/offers/838?&SITEID=2172

これに..変化する?&SITEIDと動的IDを削除する式を使用する

http://www.yoursite.com/offers/838  

誰かがこれを行うための最良/最も簡単な方法を提案できますか?

4

6 に答える 6

2

これは URL であるため、parse_url().

$url = "http://www.yoursite.com/offers/838?&SITEID=2172";
$parts = parse_url($url);

$url = $parts["scheme"] . "://" . $parts["host"] . $parts["path"];
于 2012-10-12T10:17:16.593 に答える
2

分解関数を使用すると配列が返されます

$url=http://www.yoursite.com/offers/838?&SITEID=2172
$result=explode('?',$url)
print_r($result);

出力

array
{
 [0]=>http://www.yoursite.com/offers/838
 [1]=>?&SITEID=2172
}
于 2012-10-12T10:17:35.163 に答える
2

この機能を確認してください:

$str = 'http://www.yoursite.com/offers/838?&SITEID=2172';

function remove_query_arg($var, $url = NULL){
    if(!$url){
        $url = $_SERVER['REQUEST_URI'];
    }
    $parsed_url = parse_url($url);

    $query_vars = explode('&', $parsed_url['query']);


    foreach($query_vars as $key => $value){
        $query_vars[$key] = explode('=', $query_vars[$key]);
        $query_variables[$query_vars[$key][0]] = $query_vars[$key][1];
    }

    if(is_array($var)){
        foreach($var as $value){
            unset($query_variables[$value]);
        }
    }
    elseif(is_string($var)){
        unset($query_variables[$var]);
    }

    $query_vars = array();

    foreach($query_variables as $key => $value){
        $query_vars[] = $key.($value !== NULL || !empty($value) ? '='.$value : '');
    }
    $query_str = '';
    $query_str = implode('&',$query_vars);

    return (isset($parsed_url['scheme']) && !empty($parsed_url['scheme']) ? $parsed_url['scheme'].'://' : '').$parsed_url['host'].(isset($parsed_url['path']) && !empty($parsed_url['path']) ? $parsed_url['path'] : '').(!empty($query_str) ? '?'.$query_str : '');
}

echo remove_query_arg('SITEID', $str);
于 2012-10-12T10:34:46.373 に答える
1

有効なURLは1つしかないため、2つの部分に分割するために?使用できますexplode

$url = "http://www.yoursite.com/offers/838?&SITEID=2172";
list($path, $query) = explode("?", $url, "2");
var_dump($path);

出力

string 'http://www.yoursite.com/offers/838' (length=34)
于 2012-10-12T10:13:26.417 に答える
0
$url = "http://www.yoursite.com/offers/838?&SITEID=2172"; 
$str = substr($url, strpos($url, 0, "?&SITEID"));
// $str results in "http://www.yoursite.com/offers/838"
于 2012-10-12T10:10:36.850 に答える
-1

の前の部分を残したい場合は、?検索できます

^(.+?)(\?&SITEID|$)

と置き換えます

$1

行の先頭から最初の行 ^まで貪欲に検索?&SITEIDせず、残りを除外します。no?&SITEIDが見つかった場合は、文字列の最後に到達することで行全体を取得します$

|?&SITEID正規表現に「文字列の最初または最後で停止する」ことを伝える OR 演算子です。

編集

残りのクエリ文字列を保持する必要性を説明するコメントの後に、別のアプローチをお勧めします。

&?SITEID=[^&\s]+

であること

  • &?文字列の先頭にあるオプションの &
  • SITEID=探している文字列に続いて
  • [^&\s]+任意の数の非&スペース文字

そして紐から外します。ただし、この場合、他の回答で提案されているような、正規表現以外のURL固有のアプローチを使用します。

于 2012-10-12T10:09:50.963 に答える