2009-09-23 4 views
0

У нашего приложения iphone есть чат, где пользователи могут оставлять комментарии. Недавно в чате появилось сбой приложения, потому что пользователи добавляют emojis к своим комментариям. Я пошел на свой PHP-скрипт сервера, чтобы не допускать символов, которые не находятся в диапазоне A-z0-9 (я также допускаю около 30 символов пунктуации), надеясь, что это предотвратит сбой приложения/фида. Тем не менее, emojis все еще рушится в чате.Emojis заставляет iphone сбой

Это мое регулярное выражение фильтра в моем сценарии сервера, который запрещает комментарии со специальными символами:

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

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

РНР выше утверждение говорит, что если сценарий находит символ, который не [Az] [0- 9], а не одну из отмеченных знаков препинания, затем отклонить комментарий.

Комментарий, который сломал приложение недавно ниже:

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

Любые предложения о том, что нужно сделать, чтобы предотвратить приложение от сбой?

+0

Не имеет смысла выяснять, что * сбой приложения? Вместо того, чтобы заглядывать в PHP? У вашего приложения есть ошибка, уязвимость, вам нужно исправить _that_, и к этому у нас нет никаких подробностей, чтобы попытаться помочь вам. –

+0

Правда. Я не смог повторить ошибку, хотя, когда я вхожу в emojis в чате. У меня есть собственный набор эмозисов на моем iphone, и они не приводят к сбою в чате. Мы связались с пользователем, который разбил приложение и пытается получить как можно больше информации о том, что именно они сделали, чтобы вызвать сбой. –

+0

Похоже, вы хорошо на пути к решению проблемы. :) –

ответ

0

Вот как я решил проблему. Программа теперь декодирует/кодирует комментарий, прежде чем вставлять его в базу данных.

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

Я также добавил заголовок UTF-8 для динамической подачи XML/PHP:

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

В Emojis не дисплей, который является хорошо. Но фид теперь действителен и не разбивает приложение. Задача решена.

0

Если бы мне пришлось опасаться догадки, вот что, я думаю, происходит. Скорее всего, ваше приложение не обрабатывает unicode должным образом. Есть много вещей, которые могут происходить (при подсчете количества символов == байт и т. Д.), Но если вы получите определенные строки unicode, отправленные в ваше приложение, он сработает.

iPhone Empoji реализован как unicode (используя часть частного кода в U + E001-U + E05A). Причиной вы не в состоянии правильно фильтровать является PHP регулярного выражения двигатель не обрабатывает входящие строки с использованием диапазонов высокого Юникода, если не добавить «U» до конца строки:

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

Делать это может иметь другое непреднамеренное последствия в зависимости от того, как именно настраиваются вещи, и в конечном итоге было бы намного лучше убедиться, что вы можете правильно обрабатывать произвольные строки юникода.

Смежные вопросы