Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переделать движок с win-1251 на uft-8 
:(
    Опции темы
maxipub
Дата 10.5.2018, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: нет
Всего: 1



Здравствуйте!

По долгу службы веду один большой и старый проект на 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? Сколько искал, ничего подобного так и не нашел.

Заранее спасибо!
PM MAIL   Вверх
ksnk
Дата 10.5.2018, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
maxipub
Дата 10.5.2018, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: нет
Всего: 1



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 
PM MAIL   Вверх
whatisnot
Дата 10.5.2018, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



Плюс нужно все файлы перезаписать в кодировке UTF и обязательно без ВОМ, по крайней мере те, в которых явно указывается либо используется как подключаемый текст.
PM MAIL   Вверх
maxipub
Дата 11.5.2018, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: нет
Всего: 1



whatisnot, спасибо, это понятно.

Вопрос о переделке кода PHP. Вот мне уже сказали про /u для регулярок с русскими буквами. Речь именно о таких нюансах.
PM MAIL   Вверх
whatisnot
Дата 11.5.2018, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



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


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

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

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

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

 

PM MAIL   Вверх
maxipub
Дата 14.5.2018, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: нет
Всего: 1



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

Сайт на русском языке. Так что кириллица сплошь и рядом.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.