URLのスペースのすべてのインスタンスを%20に置き換えたいと考えています。どのように正規表現でそれを行うのですか?
ありがとうございました!
文字列を別の文字列に置き換える場合は、正規表現は必要ありません:using str_replace()
は十分すぎるはずです:
$new = str_replace(' ', '%20', $your_string);
しかし、もしそれ以上が欲しいなら、おそらくあなたがURLで作業しているなら、おそらく urlencode()
関数。
独自の実装を試みるのではなく、 urlencode()
を使用します。怠け者。
私はあなたの目的のためにurlencode()の代わりにrawurlencode()を使用しなければならないと思います。
サンプル
$image = 'some images.jpg';
$url = 'http://example.com/'
Urlencode($ str)の結果は
echo $url.urlencode($image); //http://example.com/some+images.jpg
まったく%20に変わらない
しかし、rawurlencode($ image)では
echo $url.rawurlencode(basename($image)); //http://example.com/some%20images.jpg
これを行う方法はいくつかあります:
urlencode()
または rawurlencode()
-httpプロトコルのURLをエンコードするように設計された関数str_replace()
-「重機」文字列置換strtr()
-複数の文字を置換する場合、str_replace()
よりもパフォーマンスが向上しますpreg_replace()
正規表現を使用する(Perl互換)strtr()
_"\t"
_と_" "
_を_"%20"
_に置き換えたいと仮定すると:
_$replace_pairs = array(
"\t" => '%20',
" " => '%20',
);
return strtr( $text, $replace_pairs)
_
preg_replace()
ここにはいくつかのオプションがあります。スペース_~ ~
_のみを置換し、スペースとタブ_~[ \t]~
_を置換するか、すべて スペースの種類 _~\s~
_:
_return preg_replace( '~\s~', '%20', $text);
_
または、この_"\t \t \t \t"
_のような文字列を1つの_%20
_に置き換える必要がある場合:
_return preg_replace( '~\s+~', '%20', $text);
_
あなたは本当に手動で文字列の置換を使用し、ノンブレーク可能スペース(_
_)などのより多くのタイプの空白を処理したいと思った
public static function normalizeUrl(string $url) {
$parts = parse_url($url);
return $parts['scheme'] .
'://' .
$parts['Host'] .
implode('/', array_map('rawurlencode', explode('/', $parts['path'])));
}
$result = preg_replace('/ /', '%20', 'your string here');
また、使用を検討することができます
$result = urlencode($yourstring)
他の特殊文字もエスケープする