mb_substr неправильно усекает китайские иероглифы

1

Когда я запускаю этот код:

$x = '国際交流基金 - 「松島図屏風」他 日米所蔵作品による夢の競演「宗達:創造の波」展開催';
var_dump(mb_substr($x, 0, 80));

Я ожидаю, что строка не будет усечена, потому что она меньше 80 символов.

Однако это результат:

string(80) "国際交流基金 - 「松島図屏風」他 日米所蔵作品による夢�"

Любая идея, почему mb_substr обрезает ее (и не урезает последний символ должным образом)?

Теги:
character-encoding
substr

1 ответ

1
Лучший ответ

Установите правильную кодировку, которая будет использоваться функцией:

  1. как четвертый параметр - например, mb_substr($x, 0, 80, "UTF-8")
  2. или через mb_internal_encoding() перед вызовом mb_substr()
  3. или конфигурацией времени выполнения.

Пример:

$x = '国際交流基金 - 「松島図屏風」他 日米所蔵作品による夢の競演「宗達:創造の波」展開催';
var_dump(mb_substr($x, 0, 80, "UTF-8"));

Вывод:

string(123) "国際交流基金 - 「松島図屏風」他 日米所蔵作品による夢の競演「宗達:創造の波」展開催"
  • 0
    Спасибо - я исправил это с помощью # 2: mb_internal_encoding ('UTF-8');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню