Снова здравствуйте, получаю некоторые данные из БД в таком формате Код (Text): Òàêñêîì-Ìàñòåð âûïóñêà ñåðòèôèêàòîâ x86 из мануала php понял, что необходимо применить PHP: $str = mb_convert_encoding($str, "EUC-JP", "auto"); вопрос где в laravel применять данную функцию? или в laravel есть встроенное решение? Заранее спасибо за помощь!
Надо просто настроить правильно кодировку соединения в параметрах, не надо никакими функциями результат обрабатывать, он должен сразу приходить в нужном виде.
А где именно? в БД данные хранятся в таком виде Òàêñêîì-Ìàñòåð âûïóñêà ñåðòèôèêàòîâ x86 как я понимаю windows-1251 в Laravel у меня установлено utf-8 и если верить статьям в интернете изменять её на windows-1251 плохая практика. Исходя из этого, возникает вопрос где и что нужно настраивать. Если настраивать в БД, то этот вариант сразу отпадает, т.к. нет прав доступа и никто мне их не даст. Если можно приведите пожалуйста ссылку, по которой можно ознакомиться с настройками.
Ну имеется в виду, что и базу хранить в windows-1251 плохая практика. Но если уж по какой-то причине базу необходимо хранить в этой кодировке, то лучше поставить и на соединение ту же кодировку. Laravel работает с базами через обычный PDO, так что всё, что делается с PDO, можно сделать. Кстати, обычно в каком-нибудь phpmyadmin видно, в какой кодировке точно данные в базе. А я бы конвертнул базу в utf-8: http://artkiev.com/blog/mysql-cp1251-to-utf8.htm (конечно, предварительно резервную копию сделав)
К сожалению вариант конвертации базы отпадает, т.к. нет доступа, нет прав даже на бэкап, база mssql - system center microsoft и не известно как она себя поведет, а проверять никто не хочет даже на тесте как я понимаю даже если я поставлю на соединение кодировку windows-1251, то отображаться все равно будет криво, ведь запрос выполненный в microsoft sql server management studio отображает мне уже в таком виде - Òàêñêîì-Ìàñòåð âûïóñêà ñåðòèôèêàòîâ. хотя я не знаю как это работает изнутри... Про windows-1251 я узнал через декодер. И все же если вернуться к вопросу о том, что есть такая вещь как, PHP: $str=mb_convert_encoding($str,"EUC-JP","auto"); я могу как-то применять её и где? или я не правильно понял суть ответа?
Не, при правильной кодировке соединения должно отображаться сразу верно. Значит эта studio тоже не в той кодировке соединяется. Это - уже после получения результата, при обработке. Только почему из какой-то японской кодировке? Можно просто копию базы поднять и на ней поиздеваться
я увидел знакомое utf-8 на http://php.net/mb_convert_encoding поэтому и привел в качестве примера И спасибо за совет.
@mkramer поправь меня если я что-то не понимаю. Из System Centr данные пишутся в бд mssql на этот момент я повлиять не могу никак. Я забираю оттуда данные массивом и если я правильно тебя понял, то данные я декодирую не в момент когда рисую их во вьюхе а когда получил массив из бд. В итоге я получаю, декодирую и пишу к себе правильно и сравниваю в дальнейшем декодированный со своим. Но как бы я не мудохался не конвертирует и все. в исходной бд лежит такая штука - Ñåòåâîé ïîäêëþ÷àåìûé ìîäóëü Citrix (Web) онлайн декодер говорит что ISO-8859-1 => Windows 1251 Я в настройках php.ini ставил не utf 8 а cp1251, в мастер блейде ставил 1251, в блокноте к файлу применял 1251 и как только не изголялся и с1251 и с utf8 не растет кокос. PHP: // echo mb_convert_encoding( $row->DisplayName, 'UTF-8' , "CP1251").'<br/>'; // echo mb_convert_encoding( $row->DisplayName, 'CP1251' , "UTF-8").'<br/>'; если я делаю PHP: var_dump(iconv_get_encoding('all')); то все значения Код (Text): 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 раз ????????
Ну поскольку опыта работы именно c MS SQL у меня нет, не могу что-то посоветовать... Какой-нибудь iconv пробовать, но если по логике делать, это стрёмно. С базой надо работать в кодировке базы...
iconv не помог я тут перенес https://php.ru/forum/threads/ne-dekodiruetsja-naoaaie-iiaeeethaaiue-iiaeoeue.71644/
вот этот сайтик говорит, что исходная кодировка Windows-1251, а перекодирована в ISO-8859-1 этой информации должно быть достаточно для любых манипуляций с кодировкой.