web-dev-qa-db-fra.com

PHP supprimer les symboles de la chaîne

En cherchant sur Internet et sur ce site Web, j'ai trouvé plusieurs sujets à ce sujet. Le fait est qu'il existe d'innombrables solutions si les chaînes insérées ne doivent contenir que des caractères de l'alphabet latin, mais lorsque le cas nécessite du texte d'autres alphabets, cela devient un peu délicat.

Existe-t-il un moyen de supprimer PHP tous les symboles d'une chaîne, mais de laisser les lettres réelles de tous les alphabets UTF-8? J'ai déjà essayé de créer un tableau de tous les caractères de mon clavier puis en utilisant str_replace ou preg_replace, supprimez-les, mais j'ai découvert que différents pays ont également des claviers différents qui incluent parfois des symboles différents. Par exemple, mon clavier qwerty n'a pas le symbole £, qu'un Britannique clavier pourrait avoir.

Je sais que c'est une question étrange, je me demande simplement s'il existe une solution facile à cela que j'ai peut-être manquée.

Toute aide serait très appréciée!

EDIT: OK Après une recherche Google améliorée et étendue, j'ai découvert que l'expression régulière suivante fonctionne bien pour ce dont j'ai besoin et elle conserve toutes les lettres de tous les types d'alphabets tout en supprimant tous les symboles. Je le partage ici au cas où quelqu'un d'autre aurait besoin de faire de même.

$string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);

12
Dimitris Damilos

La solution est la suivante: $string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);

36
Dimitris Damilos
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.

$string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.

echo $string; // output will be abcdef-g for 'a|"bc!@£de^&$f g'
15
Arpit Gaur

Essaye ça:

<?php

$string = "Remove these characters: £äó";
$string = preg_replace('/[^(\x20-\x7F)]*/','', $string);
echo $string;
?>
1
Vijaya Pandey

Comme pour les autres réponses, créez une expression régulière pour les caractères que vous autorisez (par exemple, de chaque alphabet que vous prenez en charge, et supprimez les autres caractères. Voici une liste de plages de blocs Unicode pour obtenir les valeurs/plages de caractères pour chaque langue - c'est quelque chose dont vous aurez besoin pour vous compiler.

1
mark

Il est possible de vérifier les caractères et les chiffres Unicode, mais uniquement si PCRE a été compilé avec
--enable-unicode-properties. Si tel est le cas, vous pouvez utiliser regex \p{Nl} qui correspondra aux lettres et chiffres Unicode. Beaucoup plus d'informations sur l'expression régulière Unicode dans PHP peut être trouvé dans la documentation

MODIFIER: Après la modification à la question

Pour obtenir des symboles, utilisez \P au lieu de \p regardez à nouveau la documentation PHP que j'ai liée à ci-dessus.

1
RMcLeod