Я ищу общую стратегию/рекомендации о том, как обрабатывать недопустимый вход UTF-8 от пользователей.
Хотя мой webapp использует UTF-8, некоторые пользователи вводят недопустимые символы. Это вызывает ошибки в PHP json_encode(), и в целом кажется, что плохая идея иметь вокруг.
W3C I18N Часто задаваемые вопросы: многоязычные формы гласят: "Если получены данные, отличные от UTF-8, сообщение об ошибке должно быть отправлено обратно".
- Как именно это должно быть сделано практически на всем сайте с десятками разных мест, где могут быть введены данные?
- Как вы представляете ошибку полезным образом для пользователя?
- Как временно хранить и отображать данные плохой формы, чтобы пользователь не потерял весь свой текст? Разбить плохие персонажи? Использовать заменяющий символ и как?
- Для существующих данных в базе данных, когда обнаружены недопустимые данные UTF-8, я должен попытаться преобразовать его и сохранить его обратно (как? utf8_encode()? mb_convert_encoding()?) или оставить как-есть в базе данных, но что-то делать (что?) перед json_encode ( )?
EDIT: я очень хорошо знаком с расширением mbstring и не спрашиваю: "Как работает UTF-8 в PHP". Я хотел бы получить совет от людей с опытом работы в реальных ситуациях, как они справились с этим.
EDIT2: Как часть решения, мне бы очень хотелось увидеть быстрый способ преобразования недопустимых символов в U + FFFD