PHP, сериализируют функционально-совместимый UTF-8?

У меня есть сайт, который я хочу переместить от ISO до UTF-8.

У меня есть запись в базе данных, индексированной следующим первичным ключом:

s:22:"Informations générales";

Проблема, теперь (с UTF-8), когда я сериализирую строку, я добираюсь:

s:24:"Informations générales";

(заметьте, что размер строки является теперь числом байтов, не длиной строки),

Таким образом, это не совместимо с non-utf8 предыдущими записями!

Я делал что-то не так? Как я мог зафиксировать это?

Спасибо

5
задан Matthieu Napoli 30 March 2010 в 07:43
поделиться

3 ответа

Поведение полностью корректно. Две строки с разными кодировками будут генерировать разные потоки байтов и, следовательно, разные строки сериализации.

2
ответ дан 14 December 2019 в 04:34
поделиться

PHP 4 и 5 не имеют встроенной поддержки Unicode; Я считаю, что PHP 6 начинает добавлять больше поддержки Unicode, хотя я не уверен, насколько это полно.

1
ответ дан 14 December 2019 в 04:34
поделиться

Вы не сделали ничего плохого. PHP до версии 6 просто не поддерживает Юникод и, соответственно, не поддерживает его, если вы его не настроили (т.е. через расширение mbstring или другими способами).

Мы написали собственную обертку вокруг serialize(), чтобы исправить это. Вы также можете перейти к другим методам сериализации, например, JSON (с json_encode() и json_decode() в PHP начиная с версии 5.2.0).

0
ответ дан 14 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: