2012-04-05 5 views
0

文字列から& ID = 1620(文字列(PHP)からID = 1234を削除する正規表現

おかげで、私は&ID属性内の文字として許可されていないことを推測している

+2

は、分からないのですが、これはさえ有効なURIではありません。 – KingCrunch

+0

私はそれが有効なURLではないことを知っています - それはシステムのプロセスの一部です(あまりにも多く入ります)。私はそれが有効なURLではないことを知っています - str_replaceの他の部分は? string str_replaceがなくても元のURLを置き換えて、はっきりさせるべきでしょう。 – Zabs

+0

あなたはどういう意味ですか?ID = ...? – Dion

答えて

3

あなたが使用することができますに変更されます。このアプローチは、任意の次の属性が放置されることを確認します通常のURLであるため、[?&;]です。その場合、&?である必要があります。

それがGETのparamsの大きなリストの一部だ場合、あなたはおそらく使用したほうが良いです...

parse_str($str, $params); 

unset($params['ID']); 

$str = http_build_query($params); 
3

事前にIDが可変の文字列の長さ可能性が考慮に入れて。そのカリフォルニア州SE、あなたは(おそらくより良いPaulP.ROのおかげで)

$result = preg_replace('/&ID=[^&]+/', '', $subject); 

かを使用することができます。

$result = preg_replace('/[?&]ID=[^&]+/', '', $subject); 

これは&ID=(第2版も?ID=を削除します)に加えて、その文字の任意の量を削除します&または文字列の最後まで続けます。私はこれがあると仮定してい

$str = preg_replace('/[?&;]ID=\d+/', '', $str); 

...

$str = 'http://www.site.com?spam=eggs&ID=1620&foo=bar'; 

$str = 'http://www.site.com?spam=eggs&foo=bar'; 
+1

+1 Gazは、クエリ文字列の最初の場合には、最初の '&'の代わりに '[?&]'を使いたいかもしれません。 – Paulpro

3

URLがである場合は、ちょうどそれがある(parse_url
を使用することができます形式:http://something.com?id1=1&id2=2):あなたからこの文字列を取得する場所

$url = parse_url($str); 

echo "http://{$url['host]}"; 
+0

OPがGETパラメータを必要としない限り、これはうまく動作します。 – alex

+0

@alex OPはそれらを望んでいないように見えますが、彼がしてもOPはそれらを見るために 'parse_url'によって返された他の配列要素を使うことができます。 – Neal

+0

URLが 'http:// www.site.com&ID = 1620'であれば動作しませんが、URLが' http://www.site.com?ID = 1620'なら ' '?'と '&'を使用すると、parse_urlは簡単に混乱する可能性があります。 – Baba

関連する問題