Remplacement des espaces par des traits de soulignement

136

J'ai un script PHP que les utilisateurs entreront un nom comme: Alex_Newton,

Cependant, certains utilisateurs utiliseront un espace plutôt qu'un trait de soulignement, donc ma question est:

Comment remplacer automatiquement les espaces par des traits de soulignement en PHP?

Alex
la source

Réponses:

367
$name = str_replace(' ', '_', $name);
Fontaine Tim
la source
70

Comme d'autres ont expliqué comment le faire en utilisant str_replace, vous pouvez également utiliser regex pour y parvenir.

$name = preg_replace('/\s+/', '_', $name);
aksu
la source
11
Il s'agit d'une meilleure solution dans le sens où elle remplace plusieurs espaces par un seul trait de soulignement qui est généralement la sortie souhaitée.
frostymarvelous
5
Aussi tabs et autre
Loupax
12

Utilisez la fonction str_replace de PHP.

Quelque chose comme:

$str = str_replace(' ', '_', $str);
anubhava
la source
7

Utilisez str_replace :

str_replace(" ","_","Alex Newton");
Niklas
la source
7

Vous pouvez également le faire pour empêcher les mots de commencer ou de se terminer par des traits de soulignement comme _words_more_words_, cela éviterait de commencer et de se terminer par des espaces blancs.

$trimmed = trim($string); // Trims both ends
$convert = str_replace('', '_', $trimmed);
blakroku
la source
Ceci est intéressant, car les espaces au début / à la fin de la ligne ne seront pas remplacés par _ mais supprimés. Cependant, gardez à l'esprit qu'il peut / supprimera également d'autres caractères du début / de la fin de la chaîne comme (\ r et \ n ou tabulations).
Paul
1

Cela fait partie de mon code qui transforme les espaces en traits de soulignement pour nommer mes fichiers:

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

J'ai utilisé comme ça

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

vous pouvez str_replace dire que votre nom est en variable$name

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

une autre façon est d'utiliser regex, car cela aidera à éliminer l'espace à 2 temps, etc.

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

Strtrremplace des caractères uniques au lieu de chaînes, c'est donc une bonne solution pour cet exemple. C'est censé strtrêtre plus rapide que str_replace(mais pour ce cas d'utilisation, ils sont tous les deux extrêmement rapides).

echo strtr('Alex Newton',' ','_');
//outputs: Alex_Newton
Thoracius Appotite
la source
Cool, si l'on convertissait des espaces en "_" dans plusieurs fichiers longs (journaux?), Cela pourrait être nettement plus rapide? (Bien qu'il n'y ait aucune preuve / référence, cela peut être une réponse intéressante pour quiconque s'intéresse à la vitesse d'exécution).
Paul
Hé Paul, je pense que oui. Essayez-le et comparez-le.
Thoracius Appotite
0

str_replace- c'est une solution évidente. Mais parfois, vous devez savoir quels sont exactement les espaces. J'ai un problème avec les espaces du fichier csv.

Il y avait deux caractères mais l'un d'eux était 0160 (0x0A0) et l'autre était invisible (0x0C2)

ma solution finale:

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

J'ai trouvé le symbole invisible de la visionneuse HEX de mc (visionneuse de minuit - F3 - F9)

Aleksey Polyanskiy
la source
Et quoi '/\s+/'?
FlameStorm