Question

Je suis d'accepter une chaîne à partir d'une alimentation pour l'affichage sur l'écran qui peuvent ou peuvent ne pas inclure certains déchets Je veux filtrer. Je ne veux pas de filtrer les symboles normaux du tout.

Les valeurs que je veux supprimer ressembler à ceci:

Il est seulement ce que je veux retiré. La technologie est pertinente PHP.

Suggestions apprécié.

Était-ce utile?

La solution 2

Merci pour les réponses, les gars. Malheureusement, ceux présentés avaient les problèmes suivants:

mal pour des raisons évidentes:

ereg_replace("[^A-Za-z0-9]", "", $string);

s/[\u00FF-\uFFFF]//

qui ne fonctionne pas utilise aussi la forme ereg dépréciée de regex aussi quand je me suis converti à preg parce que la plage était tout simplement trop grand pour l'expression rationnelle à manipuler. En outre, il y a des trous dans cette gamme qui permettrait des déchets de suinter à travers.

Cette suggestion:

  

Ceci est un problème de codage; vous ne devriez pas essayer de nettoyer que les caractères faux, mais comprendre pourquoi vous les recevoir brouillées.

bien que valide, n'est pas bon parce que je ne dispose d'aucun contrôle sur la façon dont les données que je reçois est codée. Il provient d'une source externe. Parfois, il y a des ordures là-bas et parfois il n'y a pas.

Alors, la solution que je suis venu avec était relativement sale, mais en l'absence de quelque chose de plus solide, je suis juste d'accepter toutes les lettres standard, des chiffres et des symboles et jeter le reste.

Cela ne semble fonctionner pour l'instant. La solution est la suivante:

$fixT = str_replace("£", "£", $string); 
$fixT = str_replace("€", "€", $fixT);
$fixT = preg_replace("/[^a-zA-Z0-9\s\.\/:!\[\]\*\+\-\|\<\>@#\$%\^&\(\)_=\';,'\?\\\{\}`~\"]/", "", $fixT);

Si quelqu'un a une meilleure idée, je suis toujours désireux de les entendre. Vive.

Autres conseils

Ceci est un problème de codage; vous ne devriez pas essayer de nettoyer que les caractères faux, mais comprendre pourquoi vous les recevoir brouillées.

Essayez d'obtenir vos données Unicode, ou pour faire un accord avec votre fournisseur d'alimentation pour vous à la fois d'utiliser le même encodage.

Vous êtes à la recherche des caractères qui sont en dehors de la gamme de glyphes que votre police peut afficher. Vous pouvez trouver la valeur unicode maximale que votre police peut afficher, puis créer une regex qui remplacera rien au-dessus de cette valeur avec une chaîne vide. Un exemple serait

s/[\u00FF-\uFFFF]//

Ce viderait quoi que ce soit au-dessus de 255 caractères.

Cela va être difficile pour vous de faire, puisque vous ne disposez pas d'une définition solide de quoi filtrer et ce qu'il faut garder. En règle générale, les caractères qui apparaissent sous forme de carrés vides sont tout ce que la police de caractères que vous utilisez ne dispose pas d'un glyphe, donc la définition de « substance qui se présente comme ceci: » est horriblement inexacte

.

Il serait beaucoup mieux pour vous de décider exactement ce que les caractères sont valide (ce qui est toujours une bonne approche de toute façon, avec tout type de nettoyage de données) et éliminer tout ce qui ne fait pas partie de ceux-ci. La fonction PHP filtre est une possibilité de le faire, selon la niveau de complexité et de robustesse dont vous avez besoin.

Si vous ne pouvez pas résoudre le problème avec les données de l'alimentation et la nécessité de filtrer les informations cela peut aider:

filter_input est très PHP5 bon pour filtrer les chaînes d'entrée et permet une bonne quantité de rlexability

filter_input(input_type, variable, filter, options) 

Vous pouvez également filtrer toutes vos données de formulaire dans une ligne si elle nécessite le même filtrage:)

Il y a quelques bons exemples et plus d'informations à ce sujet ici:

http://www.w3schools.com/PHP/func_filter_input.asp

Le site PHP a plus d'informations sur les options: Filtres de validation

Jetez un oeil à cette question pour obtenir la valeur de chaque octet dans votre chaîne. (Cela suppose que surcharge multioctets est désactivé.)

Une fois que vous avez les octets, vous pouvez les utiliser pour déterminer ce que ces caractères « ordures » sont en réalité. Il est possible qu'ils sont un résultat de mal interpréter le codage de la chaîne, ou l'afficher dans la mauvaise police, ou autre chose. Affichez-les ici et les gens peuvent vous aider.

Essayez ceci:

  • Télécharger un échantillon de l'alimentation manuelle.
  • Ouvrir dans Notepad ++ ou un autre éditeur de texte avancé (KATE sur Linux est bon pour cela).
  • Essayez de changer le codage et la conversion d'un codage à un autre.

Si vous trouvez un paramètre qui rend les caractères affichent correctement, vous devrez soit encoder votre site dans ce codage, ou le convertir à partir de ce codage pour tout ce que vous utilisez sur votre site.

Bonjour les amis,

     try this Regular Expression to remove unicode char from the string : 

     /*\\u([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])/ 

Merci, Chintu (prajapati.chintu.001@gmail.com)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top