Je reçois une chaîne d'une requête de base de données, puis je supprime toutes les balises HTML, retours chariot et retours à la ligne avant de la mettre dans un fichier CSV. La seule chose est que je ne trouve pas de moyen de supprimer l' excès d' espace blanc entre les chaînes.
Quelle serait la meilleure façon de supprimer les caractères d'espacement internes?
Réponses:
Je ne sais pas exactement ce que vous voulez mais voici deux situations:
Si vous êtes juste affaire avec excès whitespacesur le début ou la fin de la chaîne que vous pouvez utiliser
trim()
,ltrim()
ourtrim()
pour le retirer.Si vous avez affaire à des espaces supplémentaires dans une chaîne, considérez un
preg_replace
multiple whitespaces" "*
de un avec un seul whitespace" "
.Exemple:
la source
$foo = preg_replace( '/\s+/', ' ', $foo );
va tuer les effets denl2br()
Ou remplacez par un trait de soulignement, & nbsp; etc.
la source
Hi Earth
avec 4 places entre les deux deviendront:HiEarth
. Cela ne résout pas mon problème avec la pertinence de la question.$str = trim(preg_replace('/\s+/',' ', $str));
La ligne de code ci-dessus supprimera les espaces supplémentaires , ainsi que les espaces de début et de fin.
la source
aucun autre exemple n'a fonctionné pour moi, j'ai donc utilisé celui-ci:
ceci remplace tous les onglets, les nouvelles lignes, les doubles espaces, etc. en un simple espace.
la source
\s+
. Bien que cela remonte à 2014, il a peut-être changé, n'a pas touché PHP au cours des 3 dernières années, ne peut pas commenter mais laissera la réponse actuelle alors que c'était une solution et peut-être encore dans certains cas.Si vous souhaitez remplacer uniquement plusieurs espaces dans une chaîne, par exemple:
"this string have lots of space . "
Et vous vous attendez à ce que la réponse soit"this string have lots of space"
, vous pouvez utiliser la solution suivante:la source
Il y a des failles de sécurité à utiliser preg_replace (), si vous obtenez la charge utile à partir de l'entrée utilisateur [ou d'autres sources non fiables]. PHP exécute l'expression régulière avec eval (). Si la chaîne entrante n'est pas correctement nettoyée, votre application risque d'être soumise à une injection de code .
Dans ma propre application, au lieu de me soucier de nettoyer l'entrée (et comme je ne traite que des chaînes courtes), j'ai plutôt créé une fonction un peu plus intensive en processeur, bien que sécurisée, car elle n'évalue rien ().
la source
la source
Vous pouvez utiliser:
Cela supprime les espaces supplémentaires des deux côtés de la chaîne et convertit deux espaces en un dans la chaîne. Notez que cela ne convertira pas trois espaces ou plus d'affilée en un seul! Une autre façon que je peux suggérer est d'utiliser imploser et exploser qui est plus sûr mais totalement pas optimal!
Ma suggestion est d'utiliser une boucle for native ou d'utiliser regex pour faire ce genre de travail.
la source
Pour développer la réponse de Sandip, j'avais un tas de chaînes apparaissant dans les journaux qui étaient mal codées dans bit.ly. Ils voulaient coder juste l'URL mais mettre un identifiant Twitter et d'autres éléments après un espace. Ça ressemblait à ça
Normalement, ce ne serait pas un problème, mais je reçois beaucoup de tentatives d'injection SQL, donc je redirige tout ce qui n'est pas un ID valide vers un 404. J'ai utilisé la méthode preg_replace pour transformer la chaîne productID invalide en un productID valide.
Je cherche un espace dans l'URL, puis je supprime tout ce qui suit.
la source
J'ai récemment écrit une fonction simple qui supprime l'excès d'espace blanc d'une chaîne sans expression régulière
implode(' ', array_filter(explode(' ', $str)))
.la source
la source