用下划线代替空格


136

我有一个PHP脚本,用户将输入一个名称,如:Alex_Newton

但是,某些用户将使用空格而不是下划线,因此我的问题是:

如何在PHP中使用下划线自动替换空格?

Answers:



70

正如其他人使用解释了如何做一样str_replace,您也可以使用regex实现此目的。

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

11
从某种意义上说,这是一个更好的解决方案,它用单个下划线代替了多个空格,这通常是所需的输出。
2015年

5
以及制表符和其他内容
Loupax





7

您也可以这样做,以防止单词以_words_more_words_之类的下划线开头或结尾,这样可以避免以空格开头和结尾。

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

这很有趣,因为行的开头/结尾的空格不会被_代替,而是会被删除。不过,请注意,它可能/也将从字符串的开头/结尾去除其他字符,例如(\ r和\ n或制表符)。
保罗

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

太酷了,如果要在多个冗长的文件(日志?)中将空格转换为“ _”,这可以测量得更快吗?(尽管没有证据/参考,对于那些对执行速度感兴趣的人来说,这可能是一个有趣的答案)。
保罗

嗨,保罗,我想是的。尝试并进行基准测试。
Thoracius Appotite

0

str_replace-这是明显的解决方案。但有时您需要知道确切的空间。我在csv文件中的空格有问题。

有两个字符,但其中一个是0160(0x0A0),另一个是不可见的(0x0C2)

我的最终解决方案:

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

我从mc的HEX查看器中找到了不可见的符号(午夜查看器-F3-F9)


'/\s+/'
FlameStorm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.