За последние 24 часа нас посетили 22645 программистов и 1254 робота. Сейчас ищут 694 программиста ...

Кодировка

Тема в разделе "Laravel", создана пользователем Feonix89, 3 июл 2018.

  1. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    Снова здравствуйте, получаю некоторые данные из БД в таком формате
    Код (Text):
    1. Òàêñêîì-Ìàñòåð âûïóñêà ñåðòèôèêàòîâ x86
    из мануала php понял, что необходимо применить
    PHP:
    1. $str = mb_convert_encoding($str, "EUC-JP", "auto");
    вопрос где в laravel применять данную функцию? или в laravel есть встроенное решение?
    Заранее спасибо за помощь!
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Надо просто настроить правильно кодировку соединения в параметрах, не надо никакими функциями результат обрабатывать, он должен сразу приходить в нужном виде.
     
  3. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    А где именно?
    в БД данные хранятся в таком виде Òàêñêîì-Ìàñòåð âûïóñêà ñåðòèôèêàòîâ x86 как я понимаю windows-1251
    в Laravel у меня установлено utf-8 и если верить статьям в интернете изменять её на windows-1251 плохая практика.
    Исходя из этого, возникает вопрос где и что нужно настраивать. Если настраивать в БД, то этот вариант сразу отпадает, т.к. нет прав доступа и никто мне их не даст.
    Если можно приведите пожалуйста ссылку, по которой можно ознакомиться с настройками.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Ну имеется в виду, что и базу хранить в windows-1251 плохая практика. Но если уж по какой-то причине базу необходимо хранить в этой кодировке, то лучше поставить и на соединение ту же кодировку. Laravel работает с базами через обычный PDO, так что всё, что делается с PDO, можно сделать. Кстати, обычно в каком-нибудь phpmyadmin видно, в какой кодировке точно данные в базе.
    А я бы конвертнул базу в utf-8: http://artkiev.com/blog/mysql-cp1251-to-utf8.htm (конечно, предварительно резервную копию сделав)
     
  5. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    К сожалению вариант конвертации базы отпадает, т.к. нет доступа, нет прав даже на бэкап, база mssql - system center microsoft и не известно как она себя поведет, а проверять никто не хочет даже на тесте :)
    как я понимаю даже если я поставлю на соединение кодировку windows-1251, то отображаться все равно будет криво, ведь запрос выполненный в microsoft sql server management studio отображает мне уже в таком виде - Òàêñêîì-Ìàñòåð âûïóñêà ñåðòèôèêàòîâ.
    хотя я не знаю как это работает изнутри...
    Про windows-1251 я узнал через декодер.
    И все же если вернуться к вопросу о том, что есть такая вещь как,
    PHP:
    1. $str=mb_convert_encoding($str,"EUC-JP","auto");
    я могу как-то применять её и где? или я не правильно понял суть ответа?
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Не, при правильной кодировке соединения должно отображаться сразу верно. Значит эта studio тоже не в той кодировке соединяется.
    Это - уже после получения результата, при обработке. Только почему из какой-то японской кодировке?
    Можно просто копию базы поднять и на ней поиздеваться
     
  7. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    я увидел знакомое utf-8 на http://php.net/mb_convert_encoding
    поэтому и привел в качестве примера
    И спасибо за совет.
     
  8. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    @mkramer поправь меня если я что-то не понимаю. Из System Centr данные пишутся в бд mssql на этот момент я повлиять не могу никак.
    Я забираю оттуда данные массивом и если я правильно тебя понял, то данные я декодирую не в момент когда рисую их во вьюхе а когда получил массив из бд.
    В итоге я получаю, декодирую и пишу к себе правильно и сравниваю в дальнейшем декодированный со своим.
    Но как бы я не мудохался не конвертирует и все.
    в исходной бд лежит такая штука - Ñåòåâîé ïîäêëþ÷àåìûé ìîäóëü Citrix (Web)
    онлайн декодер говорит что ISO-8859-1 => Windows 1251
    Я в настройках php.ini ставил не utf 8 а cp1251, в мастер блейде ставил 1251, в блокноте к файлу применял 1251 и как только не изголялся и с1251 и с utf8 не растет кокос.
    PHP:
    1. // echo mb_convert_encoding( $row->DisplayName, 'UTF-8' , "CP1251").'<br/>';
    2. // echo mb_convert_encoding( $row->DisplayName, 'CP1251' , "UTF-8").'<br/>';
    если я делаю то все значения
    Код (Text):
    1. array(3) { ["input_encoding"]=> string(5) "UTF-8" ["output_encoding"]=> string(5) "UTF-8" ["internal_encoding"]=> string(5) "UTF-8" }
    за что.... и как...
    --- Добавлено ---
    примеры спонтанны так как выкладывать все попытки не хватит форума суть в том что ни 1251 ни 8 ни 8859-1 не дают русский текст
    --- Добавлено ---
    и даже ретурнили из контроллера минуя charset все равно фигня
    --- Добавлено ---
    максимум что мы получили 1 раз ????????
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Ну поскольку опыта работы именно c MS SQL у меня нет, не могу что-то посоветовать... Какой-нибудь iconv пробовать, но если по логике делать, это стрёмно. С базой надо работать в кодировке базы...
     
  10. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    вот этот сайтик говорит, что исходная кодировка Windows-1251, а перекодирована в ISO-8859-1
    этой информации должно быть достаточно для любых манипуляций с кодировкой.