web-dev-qa-db-ja.com

PHPを使用して、URLSのスペースを%20に置き換えます

URLのスペースのすべてのインスタンスを%20に置き換えたいと考えています。どのように正規表現でそれを行うのですか?

ありがとうございました!

50
David

文字列を別の文字列に置き換える場合は、正規表現は必要ありません:using str_replace() は十分すぎるはずです:

$new = str_replace(' ', '%20', $your_string);


しかし、もしそれ以上が欲しいなら、おそらくあなたがURLで作業しているなら、おそらく urlencode() 関数。

77
Pascal MARTIN

独自の実装を試みるのではなく、 urlencode() を使用します。怠け者。

32
Madara Uchiha

私はあなたの目的のために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
27
drosanda

これを行う方法はいくつかあります:

  • 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);
_

あなたは本当に手動で文字列の置換を使用し、ノンブレーク可能スペース(_ _)などのより多くのタイプの空白を処理したいと思った

14
Vyktor
    public static function normalizeUrl(string $url) {
        $parts = parse_url($url);
        return $parts['scheme'] .
            '://' .
            $parts['Host'] .
            implode('/', array_map('rawurlencode', explode('/', $parts['path'])));

    }
0
Jonatas Walker
$result = preg_replace('/ /', '%20', 'your string here');

また、使用を検討することができます

$result = urlencode($yourstring)

他の特殊文字もエスケープする

0
alex347