Замена пробелов на подчеркивания

142

У меня есть PHP скрипт , который пользователи будут вводить имя как: Alex_Newton,

Однако некоторые пользователи будут использовать пробел, а не подчеркивание, поэтому мой вопрос:

Как в PHP автоматически заменить пробелы на символы подчеркивания?

Алекс
источник

Ответы:

372
$name = str_replace(' ', '_', $name);
Тим Фонтан
источник
71

Как и другие объяснили, как это сделать str_replace, вы также можете использовать регулярное выражение для этого.

$name = preg_replace('/\s+/', '_', $name);
Аксу
источник
12
Это лучшее решение в том смысле, что оно заменяет несколько пробелов одним подчеркиванием, которое обычно является желаемым результатом.
Frostymarvelous
5
Также вкладки и
прочее
13

Используйте функцию PHP str_replace .

Что-то типа:

$str = str_replace(' ', '_', $str);
анубхава
источник
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);
Jmmaguigad
источник
1

Я использовал вот так

$option = trim($option);
$option = str_replace(' ', '_', $option);
Fil
источник
1

вы можете 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);

Я нашел невидимый символ из HEX viewer от mc (полночный просмотрщик - F3 - F9)

Алексей Полянский
источник
О чем '/\s+/'?
FlameStorm