2009-09-23 5 views
0

Notre application iPhone a un chatroom où les utilisateurs peuvent poster des commentaires. Récemment, le salon de discussion a bloqué l'application car les utilisateurs ajoutent des emojis à leurs commentaires. Je suis allé à mon script PHP du serveur pour ne pas autoriser les caractères qui ne sont pas dans la gamme A-z0-9 (j'autorise également environ 30 caractères de ponctuation) en espérant que cela empêcherait le plantage de l'app/feed. Cependant, les emojis écrasent toujours le chatroom.Emojis causant iphone crash

Ceci est mon filtre d'expression régulière dans mon script serveur qui interdit les commentaires avec des caractères spéciaux:

$special = "/\W/"; 
$special2 = "/[\~\!\@\#\$\%\^\&\*\(\)\_\+\`\-\=\{\}\|\:\\\"\<\>\?\,\.\/\;\'\[\]]/"; 

if ((preg_match($special,$comment)) && (!preg_match($special2,$comment))) 

L'instruction PHP dit ci-dessus est que si le script trouve un caractère non [Az] [0- 9] et non l'une des marques de ponctuation répertoriées, puis de rejeter le commentaire.

Le commentaire qui a cassé l'application est récemment ci-dessous:

<comment>Exciting times&icirc;€Žits all about the &icirc;Â&sect; go Team!!</comment> 

Toutes les suggestions sur ce qu'il faut faire pour empêcher l'application de tomber en panne?

+0

Ne serait-il plus judicieux de savoir * ce * se bloque l'application? Au lieu de plonger dans PHP? Votre application a un bug, une vulnérabilité, vous devez corriger _that_, et pour cela nous n'avons aucun détail pour essayer de vous aider. –

+0

True. Je n'ai pas été capable de reproduire l'erreur quand je suis entré moi-même dans le salon. J'ai mon propre jeu d'emojis sur mon iphone et ils ne font pas tomber le chatroom. Nous avons contacté l'utilisateur qui a bloqué l'application et essayons d'obtenir autant d'informations que possible sur ce qu'ils ont fait pour causer le crash. –

+0

On dirait que vous êtes sur la bonne voie pour résoudre le problème. :) –

Répondre

0

Voici comment je résolu le problème. Le programme décode/code le commentaire avant de l'insérer dans la base de données.

$comment = utf8_decode($comment); 
$comment = utf8_encode($comment); 

J'ai aussi ajouté un en-tête utf-8 à la dynamique alimentation xml/php:

header('Content-type: text/html; charset=utf-8'); 

Les emojis ne présentent pas, ce qui est bien. Mais le flux est maintenant valide et ne plante pas l'application. Problème résolu.

0

Si je devais hasarder une hypothèse, voici ce que je pense qui se passe. Les chances sont que votre application ne gère pas unicode correctement. Il y a un certain nombre de choses qui pourraient se passer (en supposant que le nombre de caractères == nombre d'octets, etc), mais si vous obtenez certaines chaînes Unicode envoyées à votre application, il se bloque.

iPhone Empoji est implémenté comme unicode (en utilisant une partie de la gamme de code privé à U + E001-U + E05A). La raison pour laquelle vous n'êtes pas en mesure de filtrer correctement est le moteur de regexp PHP n'analyse pas les chaînes entrantes utilisant des plages unicode haute, sauf si vous ajoutez « u » à la fin de la chaîne:

$special2 = "/[\~\!\@\#\$\%\^\&\*\(\)\_\+\`\-\=\{\}\|\:\\\"\<\>\?\,\.\/\;\'\[\]]/u"; 

Faire cela peut avoir d'autres involontaire conséquences en fonction de la façon dont les choses sont configurées, et il serait préférable à long terme de s'assurer que vous pouvez gérer correctement les chaînes Unicode arbitraires.

Questions connexes