2010-09-09 4 views
1

J'ai un caractère arial me donnant un mal de tête. U+02DD se transforme en un point d'interrogation après que je transforme son document en un objet phpquery. Quelle est une méthode efficace pour supprimer le caractère dans php en se référant à 'U+02DD'?Comment filtrer un caractère de police dans php

+0

Est-ce le seul personnage que vous rencontrez des problèmes avec? – NullUserException

+0

Vous ne savez pas ce que vous voulez dire en transformant un document en un objet phpquery. Est-ce que l'un d'entre eux ressemble au problème que vous rencontrez? http://stackoverflow.com/search?q=mysql+char+php+question-mark – Timothy

+0

@NULLUSER: Il a été le plus grand mal de tête, mais non. J'ai un document qui est en ISO-8859-1 et je crois que c'est Arial. Les guillemets ouverts et fermés causent tous deux des problèmes. Tout le reste semble correct, mais l'échantillon de test est trop petit pour un ensemble définitif de caractères problématiques. – JMC

Répondre

2

Utilisez preg_replace et le faire comme ceci:

$str = "your text with that character"; 

echo preg_replace("#\x{02DD}#u", "", $str); //EDIT: inserted the u tag for unicode 

Pour se référer à de grandes plages de unicode, vous pouvez utiliser preg_replace et préciser le caractère unicode avec motif \x{abcd}. Le deuxième paramètre est une chaîne vide qui. Cela fera que preg_replace remplace votre personnage par rien, le supprimant effectivement.


[EDIT] Une autre façon:

Avez-vous essayé de faire htmlentities sur elle. Comme il est html-entity est ˝, faire cela OU remplacer le caractère par ˝ peut résoudre votre problème aussi. Comme ceci:

echo preg_replace("#\x{02DD}#u", "˝", $str); 
+0

La méthode preg_replace a renvoyé cet avertissement: preg_replace() [function.preg-replace]: échec de la compilation: la valeur de caractère dans la séquence \ x {...} est trop grande à l'offset 7. J'ai copié et collé votre motif. – JMC

+0

@JMC, Désolé j'ai oublié de mettre la balise 'u' de fin (pour unicode) dans le preg_replace. J'ai mis à jour le code. Il ne donnera aucune erreur maintenant et le remplacera avec succès. – shamittomar

+0

Si je voulais utiliser preg_replace sur "˝", comment écrirais-je l'expression? – JMC

4

Vous pouvez utiliser iconv() pour convertir des jeux de caractères et supprimer des caractères non valides.

<?PHP 
/* This will convert ISO-8859-1 input to UTF-8 output and 
    * strip invalid characters 
    */ 
$output = iconv("ISO-8859-1", "UTF-8//IGNORE", $input); 

/* This will attempt to convert invalid characters to something 
    * that looks approximately correct. 
    */ 
$output = iconv("ISO-8859-1", "UTF-8//TRANSLIT", $input); 
?> 

Voir la iconv() documentation à http://php.net/manual/en/function.iconv.php

+1

+1 c'est une bonne suggestion. Je devais l'utiliser en combinaison avec la réponse de shamittomar pour renvoyer la marque de citation de fantaisie dans le sol où elle appartient. Je crois que c'est un rejeton de satan. – JMC