Сайт на 2-е
1. каким-то образом удалить из строки все подобные символы
2. записать как-то текст вместе с ними
Что уже пробивал:
— Перед записью пропустить строку через: strip_tags, htmlspecialchars и подобные.
— Чистить текст регуляркой preg_replace ("/[^А-Яа-я0-9\i]/","",$resp); После такого получал новые символы со знаком вопроса..
Единственное что пока сработало это такой подход^
$vowels = array("🎁", "♦", "📌", "▼", "🐾", "✔", "🏆", "📢", "⌚", "⭐", "😃", "🎧", "🎤", "📷", "🔥", "🏻", "➰", "💡", "▶", "❤", "🍀", "🌎", "💰", "🤘", "🔋", "🎶", "😳", "⬇");
$resp = str_replace($vowels, "", $resp);
Но в виду того что предоставленный массив выше не содержит и одной сотой доли, от всех возможных символов, подобный подход считаю не рациональным.
Есть идеи как тут быть?
Уточняю, что сижу на двойке и записываю в базу через модель ф-й update.
Мне вот что интересно: в этой теме Вы смогли выложить на форум все эти символы, а содержимое постов записывается именно в базу.
Почему база этого сайта принимает юникодовые символы, а база вашего — нет?
Проверка
"🎁", "♦", "📌", "▼", "🐾", "✔", "🏆", "📢", "⌚", "⭐", "😃", "🎧", "🎤", "📷", "🔥", "🏻", "➰", "💡", "▶", "❤", "🍀", "🌎", "💰", "🤘", "🔋", "🎶", "😳", "⬇"
Мистика! Ни один из моих сайтов эти крякозябры не ест, а тут — пожалуйста!
Вот как выглядят эти крючки при редактировании:
SpAyN,
Мне вот что интересно: в этой теме Вы смогли выложить на форум все эти символы, а содержимое постов записывается именно в базу.
Почему база этого сайта принимает юникодовые символы, а база вашего — нет?
Проверка
"🎁", "♦", "📌", "▼", "🐾", "✔", "🏆", "📢", "⌚", "⭐", "😃", "🎧", "🎤", "📷", "🔥", "🏻", "➰", "💡", "▶", "❤", "🍀", "🌎", "💰", "🤘", "🔋", "🎶", "😳", "⬇"
Мистика! Ни один из моих сайтов эти крякозябры не ест, а тут — пожалуйста!
Вот как выглядят эти крючки при редактировании:
Мой сайт их пропускает если вставлять их в текстовое поле, но не один из 3-х редакторов их не пропускает и вставка в базу с помощью функции тоже.
Базу ассоциировал cp1251
Крякозябры съело.
В общем, народ рекомендует перекодировку спецсимволов:
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/
В целом спасибо за помощь!
Так может просто отсекать все эти \xc2\xc3\xc5\xc6\xcb\xce\xcf?
1. в файле ..\system\core\database.php добавляем в функцию query($sql, $params=false, $quiet=false) 146 строка следующее:
$this->mysqli->set_charset('utf8mb4');
меняем тип поля content с utf8_general_ci на utf8mb4_general_ci.
Всё! Теперь в БД будут записываться все символы)
Стоит учесть что поле seo_desc также формируется из добавляемого/редактируемого контента, но мы не поменяли его тип сравнения, следовательно не все символы попадут в него в неизменном виде.
Что мы сделали:
Мускул имеет 2 типа utf8 — собственно utf8 (1-3 байта) и utf8mb4 (4 байта). В первый тип записываются не все символы передаваемых строк (попросту говоря режутся "тяжелые" четырехбайтные). Так вот, первым действием мы указали набор символов по умолчанию, а во втором — поменяли тип поля, чтобы эти символы могли сохраниться в неизменном виде.