Leerzeichen durch Unterstriche ersetzen

136

Ich habe einen PHP - Skript , dass die Nutzer wie einen Namen eingeben werden: Alex_Newton,

Einige Benutzer verwenden jedoch eher ein Leerzeichen als einen Unterstrich. Meine Frage lautet daher:

Wie ersetze ich Leerzeichen in PHP automatisch durch Unterstriche?

Alex
quelle

Antworten:

367
$name = str_replace(' ', '_', $name);
Tim Brunnen
quelle
70

Wie andere bereits erklärt haben str_replace, können Sie auch Regex verwenden, um dies zu erreichen.

$name = preg_replace('/\s+/', '_', $name);
aksu
quelle
11
Dies ist eine bessere Lösung in dem Sinne, dass mehrere Leerzeichen durch einen einzigen Unterstrich ersetzt werden, was normalerweise die gewünschte Ausgabe ist.
frostymarvelous
5
Auch Tabs und was auch immer
Loupax
12

Verwenden Sie str_replace Funktion von PHP.

Etwas wie:

$str = str_replace(' ', '_', $str);
Anubhava
quelle
7

Verwenden Sie str_replace :

str_replace(" ","_","Alex Newton");
Niklas
quelle
7

Sie können dies auch tun, um zu verhindern, dass die Wörter mit Unterstrichen wie _words_more_words_ beginnen oder enden. Dadurch wird vermieden, dass Leerzeichen beginnen und enden.

$trimmed = trim($string); // Trims both ends
$convert = str_replace('', '_', $trimmed);
Blakroku
quelle
Dies ist interessant, da Leerzeichen am Anfang / Ende der Zeile nicht durch _ ersetzt, sondern entfernt werden. Beachten Sie jedoch, dass möglicherweise auch andere Zeichen vom Anfang / Ende der Zeichenfolge als (\ r und \ n oder Tabulatoren) entfernt werden.
Paul
1

Dies ist Teil meines Codes, der Leerzeichen zu Unterstrichen für die Benennung meiner Dateien macht:

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

Ich habe so benutzt

$option = trim($option);
$option = str_replace(' ', '_', $option);
Fil
quelle
0

Sie können str_replace sagen, Ihr Name ist in Variable$name

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

Eine andere Möglichkeit ist die Verwendung von Regex, da dies dazu beiträgt, 2-maligen Speicherplatz usw. zu eliminieren.

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

StrtrErsetzt einzelne Zeichen anstelle von Zeichenfolgen, daher ist dies eine gute Lösung für dieses Beispiel. Angeblich strtrist schneller als str_replace(aber für diesen Anwendungsfall sind beide unermesslich schnell).

echo strtr('Alex Newton',' ','_');
//outputs: Alex_Newton
Thoracius Appotite
quelle
Cool, wenn man Leerzeichen in mehreren, langen Dateien (Protokollen?) In "_" konvertieren würde, könnte dies messbar schneller sein? (Obwohl es keinen Beweis / Hinweis gibt, kann dies eine interessante Antwort für alle sein, die an der Ausführungsgeschwindigkeit interessiert sind).
Paul
Hey Paul, ich würde es mir denken. Probieren Sie es aus und messen Sie es.
Thoracius Appotite
0

str_replace- Es ist eine offensichtliche Lösung. Aber manchmal muss man genau wissen, welche Räume es gibt. Ich habe ein Problem mit Leerzeichen aus der CSV-Datei.

Es gab zwei Zeichen, aber eines davon war 0160 (0x0A0) und das andere war unsichtbar (0x0C2)

meine endgültige Lösung:

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

Ich habe das unsichtbare Symbol vom HEX-Viewer von mc gefunden (Mitternachts-Viewer - F3 - F9)

Aleksey Polyanskiy
quelle
Was ist mit '/\s+/'?
FlameStorm