Risposte:
$name = str_replace(' ', '_', $name);
Come altri hanno spiegato come farlo usando str_replace, puoi anche usare regex per raggiungere questo obiettivo.
$name = preg_replace('/\s+/', '_', $name);
$name = str_replace(' ', '_', $name);
Chiama http://php.net/str_replace :$input = str_replace(' ', '_', $input);
Usa str_replace :
str_replace(" ","_","Alex Newton");
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 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);
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
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)
'/\s+/'?