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?

Antworten:



70

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

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

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





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

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

1

Ich habe so benutzt

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

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

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

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)


Was ist mit '/\s+/'?
FlameStorm
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.