Zastępowanie spacji podkreśleniami

136

Mam skrypt PHP, który użytkownicy będą wprowadź nazwę jak: Alex_Newton,

Jednak niektórzy użytkownicy będą używać spacji zamiast podkreślenia, więc moje pytanie brzmi:

Jak automatycznie zamienić spacje na podkreślenia w PHP?

Alex
źródło

Odpowiedzi:

367
$name = str_replace(' ', '_', $name);
Tim Fountain
źródło
70

Jak inni wyjaśnili, jak to zrobić za pomocą str_replace, możesz również użyć wyrażenia regularnego, aby to osiągnąć.

$name = preg_replace('/\s+/', '_', $name);
aksu
źródło
11
Jest to lepsze rozwiązanie w tym sensie, że zastępuje wiele spacji pojedynczym podkreśleniem, co jest zwykle pożądanym wynikiem.
mroźny cud
5
Również karty i cokolwiek
Loupax
12

Użyj funkcji str_replace w PHP.

Coś jak:

$str = str_replace(' ', '_', $str);
anubhava
źródło
7

Użyj str_replace :

str_replace(" ","_","Alex Newton");
Niklas
źródło
7

Możesz również to zrobić, aby zapobiec rozpoczynaniu lub kończeniu słów podkreśleniami, takimi jak _words_more_words_. Pozwoli to uniknąć rozpoczynania i kończenia spacjami.

$trimmed = trim($string); // Trims both ends
$convert = str_replace('', '_', $trimmed);
blakroku
źródło
Jest to interesujące, ponieważ spacje na początku / końcu linii nie zostaną zastąpione przez _, ale zamiast tego zostaną usunięte. Jednak pamiętaj, że może / usunie również inne znaki z początku / końca ciągu jako (\ r i \ n lub tabulatory).
Paul,
1

To jest część mojego kodu, która zamienia spacje w podkreślenia w celu nazwania moich plików:

$file = basename($_FILES['upload']['name']);
$file = str_replace(' ','_',$file);
jmmaguigad
źródło
1

Używałem w ten sposób

$option = trim($option);
$option = str_replace(' ', '_', $option);
Fil
źródło
0

możesz użyć str_replace powiedz, że twoje imię jest w zmiennej$name

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

innym sposobem jest użycie wyrażenia regularnego, ponieważ pomoże to wyeliminować przestrzeń 2-czasową itp.

  $result=  preg_replace('/\s+/', '_', $name);
Raj
źródło
0

Strtrzastępuje pojedyncze znaki zamiast ciągów, więc jest to dobre rozwiązanie dla tego przykładu. Podobno strtrjest szybszy niż str_replace(ale w tym przypadku oba są niezmiernie szybkie).

echo strtr('Alex Newton',' ','_');
//outputs: Alex_Newton
Thoracius Appotite
źródło
Fajnie, gdyby ktoś zamienił spacje na „_” w wielu długich plikach (logach?), To mogłoby to być mierzalnie szybsze? (Chociaż nie ma dowodu / odniesienia, może to być interesująca odpowiedź dla każdego, kto jest zainteresowany szybkością wykonania).
Paul,
Hej Paul, tak mi się wydaje. Wypróbuj i porównaj.
Thoracius Appotite
0

str_replace- to oczywiste rozwiązanie. Ale czasami musisz wiedzieć, jakie dokładnie są miejsca. Mam problem ze spacjami z pliku csv.

Były dwa znaki, ale jeden z nich to 0160 (0x0A0), a drugi był niewidoczny (0x0C2)

moje ostateczne rozwiązanie:

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

Znalazłem niewidoczny symbol z przeglądarki HEX z mc (przeglądarka północy - F3 - F9)

Aleksey Polyanskiy
źródło
O co chodzi '/\s+/'?
FlameStorm