За последние 24 часа нас посетили 17425 программистов и 1716 роботов. Сейчас ищут 1594 программиста ...

Помогите с пустыми строками в БД при добавление кириллицы

Тема в разделе "Сделайте за меня", создана пользователем Aleks004, 18 янв 2024.

  1. Aleks004

    Aleks004 Новичок

    С нами с:
    17 янв 2024
    Сообщения:
    4
    Симпатии:
    0
    Когда добавляю кириллицу из админ-панели в БД пустые строки , если меняю что-то на кириллицу в самой БД всё нормально. Понял что это связанно с 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;
    }
     
  2. Aleksandr.B

    Aleksandr.B Новичок

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    strlen -> mb_strlen
    $key[$i] -> mb_substr
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    кодировка соединения с БД? Кодировка таблиц БД?
    Сами файлы php в utf8? итд итп - все должно бьть в одной кодировке

    в БД надо писать через подготовленные запросы... а не придумывать свой супер-пупер велосипед который не едет
     
  4. Aleks004

    Aleks004 Новичок

    С нами с:
    17 янв 2024
    Сообщения:
    4
    Симпатии:
    0
    Прежде чем написать сюда я всё проверил и запросы сделал к БД кодировка везде UTF-8, utf8mb4. Я обратился на нескольких форумах
    с просьбой о помощи так как сам новичок в PHP, MySQL и везде мне про кодировку и велосипед, а вот что ASCII символы с кодами от 32 до 126 не совпадают с кириллицей только один человек написал. Почитал справочники и изменил ещё изменил ENT_QUOTES на
    ENT_NOQUOTES и UTF-8 на CP1251 и латиница и кириллица стали залетать в БД но опять же это костыль, а декодировать эту строку я так и не смог. Я не писал этот код так как уже писал новичок, а тот кто писал слился вот уже месяц не отвечает.
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    ASCII это капец как древне. У вас похоже страница в win1251, сделайте всё в utf8 и не ломайте себе и нам голову
     
  6. Aleks004

    Aleks004 Новичок

    С нами с:
    17 янв 2024
    Сообщения:
    4
    Симпатии:
    0
    Я уже писал что у меня все страницы в UTF-8 и БД в utf8mb4, если вы не читаете а просто пишете не вникая в суть вопроса что дело не в кодировке а в функции
    htmlspecialchars которая фильтровала кириллицу - пожалуйста не делайте вы мне голову.
     
  7. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.487
    Симпатии:
    281
    Приведите пример проблемной кириллической строки, а также пример используемого обращения к базе.
     
  8. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    439
    Симпатии:
    84
    Адрес:
    Бавария, Германия
    Добрый день!
    Задайте кодировку в PHP utf-8 в БД MySQL-Collation utf8mb4_unicode_ci, например,
    Код (Text):
    1. CREATE TABLE `dictionary` (
    2.   `id` int(5) NOT NULL DEFAULT '0',
    3.   `ru` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
    4.   `de` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
    5.   `en` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
    6. ) ENGINE=InnoDB;
    7. --
    8. -- Daten für Tabelle `dictionary`
    9. --
    10. INSERT INTO `dictionary` (`id`, `ru`, `de`, `en`) VALUES
    11. (1, 'Привет от старых щеблет', 'münchen köln', 'Munich');
    Удачи! Screenshot 2024-01-20 055306.jpeg
     
  9. Aleks004

    Aleks004 Новичок

    С нами с:
    17 янв 2024
    Сообщения:
    4
    Симпатии:
    0
    Всем спасибо за участи. Вопрос решен
    Выложу решение может кому пригодится
    PHP:
    1. function  secureSuperGlobalPOST($key)
    2.  
    3.     {
    4.         if(!is_string($key)){
    5.             return $key;
    6.         }
    7.             return htmlspecialchars($key, ENT_QUOTES, 'UTF-8');
    8.             $ord = ord($char);
    9.             if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 255)
    10.             $return .= $char;
    11.             else
    12.             $return .= '';
    13.            
    14.            $valrets= $return;
    15.        
    16.         return $valrets;
    17.     }
     
  10. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    мало ли кто что пишет. Я не верю.
    Что вы подразумеваете что всё страницы в utf8? Задан мета тег charsett? Кодировка самого текстового файла utf8, всё вместе?
    Покажите страницу, которая шлёт post запрос?
     
  11. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    287
    Симпатии:
    21
    Функция secureSuperGlobalPOS такая странная, непонятно для чего она.

    return htmlspecialchars ...
    и дальше код.
    Есть понимание что этот код не выполнится?
     
  12. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    Челу пофиг.... Слушать не хочет, объяснять чего сам хоче тоже, налицо "проблема XY"