Sostituzione di spazi con caratteri di sottolineatura


136

Ho uno script PHP che gli utenti immettere un nome simile: Alex_Newton,

Tuttavia, alcuni utenti useranno uno spazio anziché un carattere di sottolineatura, quindi la mia domanda è:

Come posso sostituire automaticamente gli spazi con Underscores in PHP?

Risposte:



70

Come altri hanno spiegato come farlo usando str_replace, puoi anche usare regex per raggiungere questo obiettivo.

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

11
Questa è una soluzione migliore nel senso che sostituisce più spazi con un singolo trattino basso che di solito è l'output desiderato.
frostymarvelous

5
Anche schede e quant'altro
Loupax





7

Puoi anche farlo per impedire che le parole inizino o finiscano con caratteri di sottolineatura come _words_more_words_, Ciò eviterebbe l'inizio e la fine con spazi bianchi.

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

Questo è interessante, poiché gli spazi all'inizio / alla fine della riga non verranno sostituiti da _ ma rimossi. Tuttavia, tieni presente che può / rimuoverà anche altri caratteri dall'inizio / fine della stringa come (\ r e \ n o tabs).
Paul

1

Questo fa parte del mio codice che trasforma gli spazi in caratteri di sottolineatura per nominare i miei file:

$file = basename($_FILES['upload']['name']);
$file = str_replace(' ','_',$file);

1

L'ho usato così

$option = trim($option);
$option = str_replace(' ', '_', $option);

0

puoi usare str_replace dire che il tuo nome è in variabile$name

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

un altro modo è usare regex, poiché aiuterà ad eliminare lo spazio di 2 volte ecc.

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

0

Strtrsostituisce singoli caratteri anziché stringhe, quindi è una buona soluzione per questo esempio. Presumibilmente strtrè più veloce di str_replace(ma per questo caso d'uso sono entrambi incommensurabilmente veloci).

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

Fantastico, se uno dovesse convertire gli spazi in "_" in più file lunghi (registri?) Questo potrebbe essere misurabile in modo più rapido? (Sebbene non ci siano prove / riferimenti, potrebbe essere una risposta interessante per chiunque sia interessato alla velocità di esecuzione).
Paul

Ehi Paul, la penso così. Provalo e confrontalo.
Thoracius Appotite,

0

str_replace- è una soluzione evidente. Ma a volte devi sapere quali sono esattamente gli spazi. Ho un problema con gli spazi dal file CSV.

C'erano due caratteri ma uno era 0160 (0x0A0) e l'altro era invisibile (0x0C2)

la mia soluzione finale:

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

Ho trovato il simbolo invisibile dal visualizzatore HEX da mc (visualizzatore di mezzanotte - F3 - F9)


Che dire '/\s+/'?
FlameStorm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.