Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Переделать движок с win-1251 на uft-8


Автор: maxipub 10.5.2018, 11:49
Здравствуйте!

По долгу службы веду один большой и старый проект на PHP. Программирование для меня больше хобби, которым занимаюсь последние лет 20, и я уже изрядно в этом деле отстал. Недавно меняли древний сервер, на котором крутился сайт, на более современный, тогда же и перешли с PHP 5.3 на 7.1. Это было не сложно, документации много. Так же нужно было перейти с MySQL на MySQLi, т.к. в 7-ке MySQL уже удалено. Тук так же все прошло гладко, инфы полно.

Теперь встала задача сменить кодировку проекта с Windows-1251 на UTF-8. Честно скажу, с UTF-8 плотно никогда не сталкивался. Знаю что там есть свои нюансы, например, если я правильно понимаю, чтобы узнать количество символов в строке нужно использовать не привычный strlen, а mb_strlen, и т.д. Сколько таких нюансов, и какие есть другие - кто его знает...

Ребята, возможно есть какой-то мануал, чек лист и т.д. по переходу движка на PHP от Windows-1251 к UTF-8? Сколько искал, ничего подобного так и не нашел.

Заранее спасибо!

Автор: ksnk 10.5.2018, 13:58
maxipub, 
Для начала - перекодировать все исходники на utf-8 и поменять кодовую страницу сайта на utf-8
 В регулярках, если они используются для парсинга строки с русскими символами, добавить ключик /u. Почти все функции работы со строками надо будет менять на те же с префиксом mb_. Но там тоже не все так просто, иногда придется явно указывать кодировку в таких функциях, я встречал случаи, когда были глюки.
Дело муторное, но, в принципе, процесс сходится и довольно быстро.

Автор: maxipub 10.5.2018, 14:17
ksnk, спасибо большое за участие. Это в принципе ясно. Вопрос в большей степени по части PHP. Возможно, есть какие-то списки таких функций:

Цитата(ksnk @  10.5.2018,  13:58 Найти цитируемый пост)
Почти все функции работы со строками надо будет менять на те же с префиксом mb_.


Чтоб пройтись по ним. Или где бы рассматривались все возможные ситуации как:

Цитата(ksnk @  10.5.2018,  13:58 Найти цитируемый пост)
В регулярках, если они используются для парсинга строки с русскими символами, добавить ключик /u.

И
Цитата(ksnk @  10.5.2018,  13:58 Найти цитируемый пост)
Но там тоже не все так просто, иногда придется явно указывать кодировку в таких функциях, я встречал случаи, когда были глюки.

?

Смена версии PHP или переход от MySQL к MySQLi в куче мест описан детально. А вот по сабжу так ничего и не нашел. Я же не могу пересматривать 900кб кода и перепроверять каждую функцию в нем. smile 

Автор: whatisnot 10.5.2018, 14:35
Плюс нужно все файлы перезаписать в кодировке UTF и обязательно без ВОМ, по крайней мере те, в которых явно указывается либо используется как подключаемый текст.

Автор: maxipub 11.5.2018, 12:41
whatisnot, спасибо, это понятно.

Вопрос о переделке кода PHP. Вот мне уже сказали про /u для регулярок с русскими буквами. Речь именно о таких нюансах.

Автор: whatisnot 11.5.2018, 15:06
Цитата(maxipub @  11.5.2018,  12:41 Найти цитируемый пост)
Вот мне уже сказали про /u для регулярок с русскими буквами.


Не с русскими, а для указания того, что данные в UTF.

В общем-то о какой-то переделке и говорить не приходится, нужно всего лишь откорректировать то, что учитывает кодировку. Например, если в строке с латиницей и кириллицей заменяется только латиница функцией str_replace, то ничего изменять не надо и для кодировки UTF этой строки, так как латиница в UTF все равно занимает один байт.

Если используются ajax запросы, json формат, которые работают только с UTF, значит нужно удалить перекодирование неизбежное при CP1251.

Определить кодировку по умолчанию mb_internal_encoding("UTF-8"), как и соответствующую кодировку соединения с базой. Перекодировать таблиц базы.

 

Автор: maxipub 14.5.2018, 11:50
Цитата(whatisnot @  11.5.2018,  15:06 Найти цитируемый пост)
В общем-то о какой-то переделке и говорить не приходится, нужно всего лишь откорректировать то, что учитывает кодировку. Например, если в строке с латиницей и кириллицей заменяется только латиница функцией str_replace, то ничего изменять не надо и для кодировки UTF этой строки, так как латиница в UTF все равно занимает один байт.

Сайт на русском языке. Так что кириллица сплошь и рядом.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)