возможно, решение проблемы вместо ее обхода будет лучшим решением. если вы просто удалите вопросительные знаки, сохраненные данные не будут такими уродливыми, как сейчас, но все равно будут неправильными (неправильно = не совсем те данные, которые пользователь хотел сохранить).
эта проблема звучит так, как будто вы пропустили где-то указать кодировку символов, так что используются настройки клиента по умолчанию (вы не сказали, кто именно клиенты - может быть, браузер пользователя?), Который, кажется, является утф. 8 или что-то совместимое в большинстве случаев - но иногда есть клинт с экзотической кодировкой по умолчанию, которая заставляет вас сталкиваться с проблемами.
Чтобы решить эту проблему, просто убедитесь, что для кодировки символов установлено значение utf-8 everywere :
скажите MySQL использовать utf-8. чтобы сделать это, добавьте это в ваш my.cnf:
collation_server = utf8_unicode_ci
character_set_server = utf8
прежде чем взаимодействовать с mysql, отправьте два запроса:
SET NAMES 'utf8';
CHARSET 'utf8';
или, альтернативно, пусть php сделает это после открытия соединения:
mysql_set_charset('utf8', $conn);
установить UTF-8 в качестве кодировки по умолчанию для вашей базы данных
CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8';
сделать то же самое для таблиц:
CREATE TABLE `my_table` (
-- ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
при условии, что клиент является браузером, используйте ваш контент как utf-8 и правильный заголовок:
header('Content-type: text/html; charset=utf-8');
, чтобы убедиться, что браузер понимает, добавьте метатег:
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
и, что не менее важно, сообщите браузеру отправлять формы с использованием utf-8
<form accept-charset="utf-8" ...>