У меня есть сайт, который я хочу переместить от ISO до UTF-8.
У меня есть запись в базе данных, индексированной следующим первичным ключом:
s:22:"Informations générales";
Проблема, теперь (с UTF-8), когда я сериализирую строку, я добираюсь:
s:24:"Informations générales";
(заметьте, что размер строки является теперь числом байтов, не длиной строки),
Таким образом, это не совместимо с non-utf8 предыдущими записями!
Я делал что-то не так? Как я мог зафиксировать это?
Спасибо
Поведение полностью корректно. Две строки с разными кодировками будут генерировать разные потоки байтов и, следовательно, разные строки сериализации.
PHP 4 и 5 не имеют встроенной поддержки Unicode; Я считаю, что PHP 6 начинает добавлять больше поддержки Unicode, хотя я не уверен, насколько это полно.
Вы не сделали ничего плохого. PHP до версии 6 просто не поддерживает Юникод и, соответственно, не поддерживает его, если вы его не настроили (т.е. через расширение mbstring
или другими способами).
Мы написали собственную обертку вокруг serialize()
, чтобы исправить это. Вы также можете перейти к другим методам сериализации, например, JSON (с json_encode()
и json_decode()
в PHP начиная с версии 5.2.0).