Как записать Unicode-символы в mysql

Сайт на 2-е

 
Посетитель
small user social cms
Сообщений: 24
Собственно проблема такая: если в тексте есть подобный символ 📌 то текст после него не записывается в бд.(как и сам этот символ) Меня устроит любой из двух вариантов решения:
1. каким-то образом удалить из строки все подобные символы
2. записать как-то текст вместе с ними
Что уже пробивал:
- Перед записью пропустить строку через: strip_tags, htmlspecialchars и подобные.
- Чистить текст регуляркой preg_replace ("/[^А-Яа-я0-9\i]/","",$resp); После такого получал новые символы со знаком вопроса..
Единственное что пока сработало это такой подход^
$vowels = array("🎁", "♦", "📌", "▼", "🐾", "✔", "🏆", "📢", "⌚", "⭐", "😃", "🎧", "🎤", "📷", "🔥", "🏻", "➰", "💡", "▶", "❤", "🍀", "🌎", "💰", "🤘", "🔋", "🎶", "😳", "⬇");
$resp = str_replace($vowels, "", $resp);
Но в виду того что предоставленный массив выше не содержит и одной сотой доли, от всех возможных символов, подобный подход считаю не рациональным.
Есть идеи как тут быть?
Уточняю, что сижу на двойке и записываю в базу через модель ф-й update.
Редактировалось: 1 раз (Последний: 5 февраля 2016 в 16:55)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2711
SpAyN,
Мне вот что интересно: в этой теме Вы смогли выложить на форум все эти символы, а содержимое постов записывается именно в базу.
Почему база этого сайта принимает юникодовые символы, а база вашего - нет?

Проверка

"🎁", "♦", "📌", "▼", "🐾", "✔", "🏆", "📢", "⌚", "⭐", "😃", "🎧", "🎤", "📷", "🔥", "🏻", "➰", "💡", "▶", "❤", "🍀", "🌎", "💰", "🤘", "🔋", "🎶", "😳", "⬇"

Мистика! Ни один из моих сайтов эти крякозябры не ест, а тут - пожалуйста!
Вот как выглядят эти крючки при редактировании:

Как записать Unicode-символы в mysql
Редактировалось: 3 раз (Последний: 5 февраля 2016 в 19:20)
Реклама
cms
Посетитель
small user social cms
Сообщений: 24
HiAndy:

SpAyN,
Мне вот что интересно: в этой теме Вы смогли выложить на форум все эти символы, а содержимое постов записывается именно в базу.
Почему база этого сайта принимает юникодовые символы, а база вашего - нет?

Проверка

"🎁", "♦", "📌", "▼", "🐾", "✔", "🏆", "📢", "⌚", "⭐", "😃", "🎧", "🎤", "📷", "🔥", "🏻", "➰", "💡", "▶", "❤", "🍀", "🌎", "💰", "🤘", "🔋", "🎶", "😳", "⬇"

Мистика! Ни один из моих сайтов эти крякозябры не ест, а тут - пожалуйста!
Вот как выглядят эти крючки при редактировании:

Как записать Unicode-символы в mysql

Мой сайт их пропускает если вставлять их в текстовое поле, но не один из 3-х редакторов их не пропускает и вставка в базу с помощью функции тоже.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2711
Быстро развернул на опенсервере instant 1.8

Базу ассоциировал cp1251
Крякозябры съело.
Как записать Unicode-символы в mysql

В общем, народ рекомендует перекодировку спецсимволов:
http://phpclub.ru/talk/threads/utf-8-%D1%81%D0%BF%D0%B5%D1%86%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B.56761/
Редактировалось: 1 раз (Последний: 5 февраля 2016 в 19:51)
Посетитель
small user social cms
Сообщений: 24
HiAndy, ассоциировав поле с cp1251_general_ci, теперь оно сохраняет, но на место спец символов ставит "????" потом функцией str_replace('????', "", $resp); удаляю эти вопросы, пока проблему решил так. При попытке же использования ф-и iconv записывает в базу только 0 и поюзав ф-ю utf8_html_entity_encode так и не заметил разницы, вникать же в нее не стал...
В целом спасибо за помощь!
Редактировалось: 1 раз (Последний: 5 февраля 2016 в 20:44)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2711
SpAyN,
Так может просто отсекать все эти \xc2\xc3\xc5\xc6\xcb\xce\xcf ?
Посетитель
small user social cms
Сообщений: 24
HiAndy:
Я так понимаю ф-я utf8_html_entity_encode должна это делать, но она у меня не работает, просто я не вижу не каких изменений после пропуска строки, через нее.
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1164
SpAyN, если интересует решение с помощью хака:
1. в файле ..\system\core\database.php добавляем в функцию query($sql, $params=false, $quiet=false) 146 строка следующее:
Код PHP:
  1. $this->mysqli->set_charset('utf8mb4');
2. в нужном вам типе контента (или во всех типах контента)) ) в таблице cms_con_<имя_типа_контента> (cms - ваш префикс таблиц БД)
меняем тип поля content с utf8_general_ci на utf8mb4_general_ci.
Всё! Теперь в БД будут записываться все символы)
Стоит учесть что поле seo_desc также формируется из добавляемого/редактируемого контента, но мы не поменяли его тип сравнения, следовательно не все символы попадут в него в неизменном виде.

Что мы сделали:
Мускул имеет 2 типа utf8 - собственно utf8 (1-3 байта) и utf8mb4 (4 байта). В первый тип записываются не все символы передаваемых строк (попросту говоря режутся "тяжелые" четырехбайтные). Так вот, первым действием мы указали набор символов по умолчанию, а во втором - поменяли тип поля, чтобы эти символы могли сохраниться в неизменном виде.
Посетитель
small user social cms
Сообщений: 24
Val:
Спасибо, все работает!
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.