2015-08-28 3 views
1

Когда я запускаю этот код:mb_substr не усечение китайских иероглифов правильно

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

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

Однако это выход:

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

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

ответ

1

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

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

Example:

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

Выход:

string(123) "国際交流基金 - 「松島図屏風」他 日米所蔵作品による夢の競演「宗達:創造の波」展開催" 
+0

Спасибо - я установил его с # 2: mb_internal_encoding ('UTF-8'); –

Смежные вопросы