Удаление символа маркера unicode

У меня возникла проблема, которая, как мне кажется, связана с текстом unicode. Когда пользователь вводит строку с символом маркера unicode, mysql не может сохранить это поле (остальная часть запроса на обновление работает, хотя). Вот как я пытался справиться с этим.

$str = "· Close up the server";

 $str = preg_replace("\u2022", "•", $str); 

… однако это все еще не работает.

Так много вещей может пойти не так, потому что база данных, формы и исходные тексты строк. Предположим, вы хотите использовать UTF-8, потому что с любым другим типичным кодированием (CP1252, Latin1) вы будете ввернуты, если хотите использовать json_ или принять более 200 разных символов.

Первое, что нужно сделать – удалить любой код конверсии и т. Д., Который был написан с целью исправить проблемы с кодировкой. Например, utf8_encode , htmlentitites , *_replace .. что угодно.


Исходная кодировка.

 $str = "· Close up the server"; 

При написании выше, исходный файл PHP должен быть физически закодирован в UTF-8. Если вы находитесь в Windows, вы должны явно это сделать или настроить. UTF-8 волшебным образом не работает в Windows.


Форма отправляет

Когда пользователь отправляет форму, полезная нагрузка будет в любой кодировке, которую вы указали на странице. Вы можете объявить его так:

 header("Content-Type: text/html; charset=utf-8"); 

Но любой может фактически отправить произвольные байты на ваш сервер, поэтому вы должны проверить, что вход находится в UTF-8, прежде чем продолжить. mb_check_encoding – это хорошо.


База данных

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

 mysql_set_charset("utf8"); //After making the connection, and before any queries //or $mysqli->set_charset( "utf8"); 

Это заставляет базу данных читать ваши данные в UTF-8 и кодировать ее вывод в UTF-8. Вы также хотели бы установить свои столбцы / таблицы / базы данных в UTF-8.


Unicode escape-последовательности \uxxxx или \uhhhh\ullll или \Uxxxxxxxx не поддерживаются в PHP.

\u2022 – это шестнадцатеричное кодирование UTF-16 для «Bullet». Не UTF-8 .

Возможно, вы также захотите SET NAMES 'UTF-8'; или изменить кодировку, прежде чем открывать базу данных.