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?

Réponses:



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

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





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

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

1

J'ai utilisé comme ça

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

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

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

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)


Et quoi '/\s+/'?
FlameStorm
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.