За последние 24 часа нас посетили 5356 программистов и 443 робота. Сейчас ищут 130 программистов ...

Не декодируется - Ñåòåâîé ïîäêëþ÷àåìûé ìîäóëü

Тема в разделе "PHP для новичков", создана пользователем Feonix89, 11 июл 2018.

  1. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    76
    Симпатии:
    2
    В БД хранится в таком виде - Ñåòåâîé ïîäêëþ÷àåìûé ìîäóëü Citrix повлиять на правильную запись в БД нет возможности.
    Уже несколько дней бьемся чтобы перевести в UTF-8. Нифига не выходит.
    Онлайн конвертеры переводят на ура, но все по разному (и из ISO-8859-1 в CP1251 и ISO15... и CP1252 ....... не поймешь). Перепробовали все варианты кодировок вручную и нифига. И кодировку проекта меняли и на ISO, и на UTF, и на CP1251 и нифига. Наиболее похожая на правду это CP866. Но это не читабельно.

    Маленький пример из того, что только не пробовали:
    PHP:
    1. $str = 'Ñåòåâîé ïîäêëþ÷àåìûé ìîäóëü Citrix';
    2. echo mb_http_output().'<br/>';
    3. mb_http_output("cp1251");
    4. echo '<br/>'.mb_http_output().'<br/>';
    5. echo $str.'<br/>';
    6. $interenc = mb_internal_encoding();
    7. $interenc = mb_convert_variables($interenc, "cp1252,UTF-8,iso-8859-15", $str);
    8. echo $str.'<br/>';
    9. echo $interenc;
    Пробовали iconv таже фигня. Есть АС с большой буквы у которого получится? или куда еще смотреть? ну просто уже п....ц какой то.... По логике даже если не замахиваться на utf-8 (а надо в ней).
    В master.blade.php - charset cp1251,
    в layout аналогично,
    допустим я доверяю декодеру и из ISO 8859-1 перевожу в Windows 1251 я должен с..... увидеть
    Сетевой подключаемый модуль Citrix но нет...
    Помогите кто может!!!
     
  2. TeslaFeo

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

    С нами с:
    9 мар 2016
    Сообщения:
    2.531
    Симпатии:
    623
    так не будет работать
    только что попробовал. Считается, что строка в кодировке файла. Детектит строку как UTF-8 (ибо файл в этой кодировке)
     
  3. TeslaFeo

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

    С нами с:
    9 мар 2016
    Сообщения:
    2.531
    Симпатии:
    623
    Вот волшебная функция которая кушает твои кракозябры и возвращает обработанный текст в UTF-8
    PHP:
    1. function decoderApiCall($str){
    2.     $curl = curl_init('http://api.foxtools.ru/v2/TextDecoder');
    3.     curl_setopt($curl, CURLOPT_HEADER, false);
    4.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    5.     curl_setopt($curl, CURLOPT_POST, true);
    6.     curl_setopt($curl, CURLOPT_POSTFIELDS, ['text' => $str]);
    7.     $response = curl_exec($curl);
    8.     curl_close($curl);
    9.     $response = json_decode($response, true);
    10.     return $response['response']['items'][10]['value'];
    11. }
    файл естессно должен быть в этой же кодировке

    с API особо не возился, но ты можешь повозиться :)

    скажется на времени загрузки страницы, если юзать на лету :(
     
    Feonix89 нравится это.
  4. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    76
    Симпатии:
    2
    @TeslaFeo спасибо большое!, но есть одно но :) нет интернета ....
     
  5. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    76
    Симпатии:
    2
    Я вот думаю о чем строка в таком формате приходит в проект utf-8 и становится utf-8, я в саблайме сделал кодировку 1252 листа вставил текст в таком виде Ñåòåâîé ïîäêëþ÷àåìûé ìîäóëü Citrix и конвертировал в 1251 он стал корректным.
    Тут есть 2 варианта наверное: 1 вариант это перевести проект на 1251 и второй вариант сделать скриптовую страницу в 1252 получать туда запросом данные и конвертить их в 1251 и возвращать в проект. Как вы думаете?
     
  6. TeslaFeo

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

    С нами с:
    9 мар 2016
    Сообщения:
    2.531
    Симпатии:
    623
    Самый простой вариант,если в бд лежит в cp1251, перевестипроект в 1251 и кодировку соединения с бд установить в 1251. И всё должно работать. Если к бд доступа не дают, то оптимальнее некуда.
     
  7. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    76
    Симпатии:
    2
    @TeslaFeo там 1251 но хранятся данные уже в таком виде с кракозябрами (так system center пишет в бд русские буквы) т.е. перевод проекта отображает мне те же кракозябры :)
    может я чего то не понимаю но сам факт что запрос в студии выводит те же кракозябры и попытка запросом изменить ячейку тоже дает кракозябры но если я туда пишу русские символы то они корректно отображаются :)
    проблема в том что изначально туда пишется не в той кодировке и из-за этого я не могу выдернуть корректно. Т.е. по идее должен сработать проект в кодировке 1252, получится что я получу данные с тек кодировкой в 1252 в виде Ñåòåâîé ïîäêëþ÷àåìûé ìîäóëü Citrix' и если конвертирую их в 1251 тогда увижу русский текст но это теория и так себе решение :) настроить SC чтобы он изначально писал в БД правильно нет возможности, перевести БД в другую кодировку тоже нет возможности
    Кракозябры.png
    вот что дает запрос
    --- Добавлено ---
    я никогда не думал что придется иметь дело с таким ....
     
  8. Taktreba

    Taktreba Новичок

    С нами с:
    11 янв 2017
    Сообщения:
    347
    Симпатии:
    84
    я не когда не думал что стану программистом...
    как же я это кодировкай заеб**ся https://php.ru/forum/threads/kodirovka-proetka.71564/
     
  9. TeslaFeo

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

    С нами с:
    9 мар 2016
    Сообщения:
    2.531
    Симпатии:
    623
    установи везде одинаковую кодировку на ВСЁМ ПУТИ и будет всё писаться храниться и читаться правильно
    ВСЁ
    --- Добавлено ---
    еслои тебе доступ к БД не дают, то пусть сами чинят)
     
  10. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    76
    Симпатии:
    2
    РЕШЕНО. Вот тут изложена суть решения проблемы если есть права на БД http://www.sql.ru/forum/1145211-2/problema-s-kodirovkoy-russkih-bukv-posle-perenosa-bazy ,
    а если прав на бд нет, то такой код в помощь
    PHP:
    1. $text_display_name = $item->DisplayName;
    2. $text_display_name = iconv('utf-8//IGNORE', 'cp1252//IGNORE', $text_display_name);
    3. $text_display_name = iconv('cp1251//IGNORE', 'utf-8//IGNORE', $text_display_name);
    4. $item->DisplayName = $text_display_name;
    P.S. для работы с кракозябрами в конкретном случае, при таком подходе русские буквы в исходящей кодировке будут преобразованы в пустоту :)
     
    TeslaFeo нравится это.