スペースをアンダースコアに置き換える


136

私は、ユーザーがのような名前を入力することをPHPスクリプトを持っていますAlex_Newton

ただし、一部のユーザーはアンダースコアではなくスペースを使用するため、私の質問は次のとおりです。

PHPでスペースをアンダースコアに自動置換するにはどうすればよいですか?

回答:



70

他の人がを使用してそれを行う方法を説明しているのでstr_replace、これを達成するために正規表現を使用することもできます。

$name = preg_replace('/\s+/', '_', $name);

11
これは、複数のスペースを、通常は望ましい出力である単一の下線で置き換えるという意味で、より良い解決策です。
霜降りのすばらしい2015年

5
タブなども
Loupax 2016年





7

これを行うと、単語が_words_more_words_のようにアンダースコアで開始または終了しないようにすることができます。これにより、空白で開始および終了することを回避できます。

$trimmed = trim($string); // Trims both ends
$convert = str_replace('', '_', $trimmed);

行の最初と最後のスペースは_に置き換えられず、代わりに削除されるため、これは興味深いものです。ただし、文字列の先頭/末尾から(\ rと\ nまたはタブ)として他の文字を削除することもあります。
Paul

1

これは私のファイルの名前を付けるためにスペースをアンダースコアに変える私のコードの一部です:

$file = basename($_FILES['upload']['name']);
$file = str_replace(' ','_',$file);

1

私はこのように使用しました

$option = trim($option);
$option = str_replace(' ', '_', $option);

0

あなたはstr_replace あなたの名前が変数であると言うことができます$name

$result = str_replace(' ', '_', $name);

別の方法は、正規表現を使用することです。これは、2倍のスペースなどを削除するのに役立ちます。

  $result=  preg_replace('/\s+/', '_', $name);

0

Strtr文字列の代わりに単一の文字を置き換えるので、この例の良い解決策です。おそらくstrtrよりも高速ですstr_replace(ただし、この使用例ではどちらも計り知れないほど高速です)。

echo strtr('Alex Newton',' ','_');
//outputs: Alex_Newton

クールですが、複数の長いファイル(ログ?)でスペースを "_"に変換する場合、これはかなり高速になりますか?(証明/参照はありませんが、実行速度に興味がある人にとっては興味深い答えになるでしょう)。
Paul

ポールさん、そう思います。それを試して、それをベンチマークしてください。
Thoracius Appotite

0

str_replace-それは明白な解決策です。しかし、時々あなたは正確にそこにある空間が何であるかを知る必要がある。csvファイルのスペースに問題があります。

2つの文字がありましたが、1つは0160(0x0A0)で、もう1つは表示されませんでした(0x0C2)

私の最終的な解決策:

$str = preg_replace('/\xC2\xA0+/', '', $str);

mcのHEXビューアからの見えないシンボルを見つけました(真夜中のビューア-F3-F9)


どう'/\s+/'ですか?
FlameStorm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.