Заміна просторів на підкреслення


136

У мене є PHP скрипт , який користувачі будуть вводити ім'я як: Alex_Newton,

Однак деякі користувачі будуть використовувати пробіл, а не підкреслення, тому моє питання таке:

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

Відповіді:



70

Як і інші пояснили, як це зробити за допомогою str_replace, ви також можете використовувати регулярний вираз для досягнення цього.

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

11
Це краще рішення в тому сенсі, що воно замінює кілька пробілів одним підкресленням, яке зазвичай є бажаним результатом.
frostymarvelous

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

інший спосіб - використовувати регулярний вираз, оскільки це допоможе усунути дворазовий простір тощо.

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

0

Strtrзамінює окремі символи замість рядків, тому це хороше рішення для цього прикладу. Імовірно, strtrце швидше, ніж str_replace(але для цього випадку використання вони неодмінно швидкі).

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

Прикольно, якби перетворити пробіли на "_" у декількох тривалих файлах (журналах?) Це може бути помірно швидше? (Хоча доказ / посилання немає, це може бути цікавою відповіддю для всіх, хто цікавиться швидкістю виконання).
Павло

Гей, Пол, я б так думав. Спробуйте це і порівняйте його.
Торацій Аплодит

0

str_replace- це очевидне рішення. Але іноді потрібно знати, які саме місця є. У мене проблема з пробілами з CSV-файлу.

Було дві символи, але одна - 0160 (0x0A0), а інша - невидима (0x0C2)

моє остаточне рішення:

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

Я знайшов невидимий символ у HEX глядача від mc (переглядач опівночі - F3 - F9)


Про що '/\s+/'?
FlameStorm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.