Когда добавляю кириллицу из админ-панели в БД пустые строки , если меняю что-то на кириллицу в самой БД всё нормально. Понял что это связанно с htmlspecialchars, но как победить его так и не понял. Пробовал декодировать с помощью iconv и htmlspecialchars_decode ничего не получилось, а скорее всего не правильно делаю. У меня PHP 8.1, MYSQL 8. functionsecureSuperGlobalPOST($key) { if(is_array($key)){ $valrets= $value; }elseif($key) { $return = ''; for($i = 0; $i < strlen($key ); ++$i) { $char = htmlspecialchars($key[$i], ENT_QUOTES, 'UTF-8'); $ord = ord($char); if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126) $return.=$char; else $return.=''; } $valrets= $return; } return$valrets; }
кодировка соединения с БД? Кодировка таблиц БД? Сами файлы php в utf8? итд итп - все должно бьть в одной кодировке в БД надо писать через подготовленные запросы... а не придумывать свой супер-пупер велосипед который не едет
Прежде чем написать сюда я всё проверил и запросы сделал к БД кодировка везде UTF-8, utf8mb4. Я обратился на нескольких форумах с просьбой о помощи так как сам новичок в PHP, MySQL и везде мне про кодировку и велосипед, а вот что ASCII символы с кодами от 32 до 126 не совпадают с кириллицей только один человек написал. Почитал справочники и изменил ещё изменил ENT_QUOTES на ENT_NOQUOTES и UTF-8 на CP1251 и латиница и кириллица стали залетать в БД но опять же это костыль, а декодировать эту строку я так и не смог. Я не писал этот код так как уже писал новичок, а тот кто писал слился вот уже месяц не отвечает.
ASCII это капец как древне. У вас похоже страница в win1251, сделайте всё в utf8 и не ломайте себе и нам голову
Я уже писал что у меня все страницы в UTF-8 и БД в utf8mb4, если вы не читаете а просто пишете не вникая в суть вопроса что дело не в кодировке а в функции htmlspecialchars которая фильтровала кириллицу - пожалуйста не делайте вы мне голову.
Добрый день! Задайте кодировку в PHP utf-8 в БД MySQL-Collation utf8mb4_unicode_ci, например, Код (Text): CREATE TABLE `dictionary` ( `id` int(5) NOT NULL DEFAULT '0', `ru` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, `de` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, `en` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ) ENGINE=InnoDB; -- -- Daten für Tabelle `dictionary` -- INSERT INTO `dictionary` (`id`, `ru`, `de`, `en`) VALUES (1, 'Привет от старых щеблет', 'münchen köln', 'Munich'); Удачи!
Всем спасибо за участи. Вопрос решен Выложу решение может кому пригодится PHP: function secureSuperGlobalPOST($key) { if(!is_string($key)){ return $key; } return htmlspecialchars($key, ENT_QUOTES, 'UTF-8'); $ord = ord($char); if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 255) $return .= $char; else $return .= ''; $valrets= $return; return $valrets; }
мало ли кто что пишет. Я не верю. Что вы подразумеваете что всё страницы в utf8? Задан мета тег charsett? Кодировка самого текстового файла utf8, всё вместе? Покажите страницу, которая шлёт post запрос?
Функция secureSuperGlobalPOS такая странная, непонятно для чего она. return htmlspecialchars ... и дальше код. Есть понимание что этот код не выполнится?