2011-09-21 13 views
1

En PHP, j'ai besoin de remplacer tous les caractères non-UTF8 dans une chaîne. Cependant, pas par un équivalent (comme la fonction iconv avec //TRANSLIT) mais par un caractère choisi (comme "_" ou "*" par exemple).Remplacement des caractères non UTF8

Typiquement, je veux que l'utilisateur puisse voir la position où les caractères invalides ont été trouvés.

Je ne trouve pas de fonctions qui font cela, alors je vais utiliser:

  • utilisation iconv avec //IGNORE
  • faire une diff sur les deux chaînes et insérer le caractère voulu où le non -UTF8 ones

Voyez-vous une meilleure façon de faire cela, y a-t-il des fonctions dans php qui peuvent être combinées pour avoir ce comportement?

Merci pour votre aide.

Répondre

3

Voici 2 fonctions pour vous aider à réaliser quelque chose à ce que vous voulez:

//reject overly long 2 byte sequences, as well as characters above U+10000 and replace with ? 
$some_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'. 
'|[\x00-\x7F][\x80-\xBF]+'. 
'|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'. 
'|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'. 
'|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S', 
'?', $some_string); 

//reject overly long 3 byte sequences and UTF-16 surrogates and replace with ? 
$some_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'. 
'|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $some_string); 

Notez que vous pouvez changer le remplacement (qui est actuellement avec quoi que ce soit d'autre en changeant la chaîne située à preg_replace('blablabla', **'?'**, $some_string) '?

l'article original: http://magp.ie/2011/01/06/remove-non-utf8-characters-from-string-with-php/

+0

sonne plutôt bien, je vais le tester. –

Questions connexes