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


142

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

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

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

Ответы:



71

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

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

12
Это лучшее решение в том смысле, что оно заменяет несколько пробелов одним подчеркиванием, которое обычно является желаемым результатом.
Frostymarvelous

5
Также вкладки и
прочее





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

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.