2016-05-18 5 views
1

Если я использую substr_replace() как так ...Почему эллипсис нарушает substr_replace?

echo substr_replace('Replace: foo', 'bar', 9, 3); 
// Echoes 'Replace:bar' 

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

echo substr_replace('Replace… foo', 'bar', 9, 3); 
// Echoes 'Replace��baroo' 

Однако, если изменить положение начала его работы:

echo substr_replace('Replace… foo', 'bar', 11, 3); 
// Echoes 'Replace… bar' 

ли substr_replace() сотрудничества nsider эллипсис, чтобы быть тремя отдельными символами для офсетных целей? Это проблема с кодировкой?

ответ

0

После долгих выдержек волос я нашел ответ: substr_replace не является многобайтовым (utf-8) совместимым.

Как нет mb_substr_replace() вот работа вокруг, что будет эквивалентно приведенному выше примеру:

mb_internal_encoding("UTF-8"); 
$text = 'Replace… foo'; 
$start = 9; 
$length = 3; 
echo mb_substr($text, 0, $start) . $foo . mb_substr($text, $start, $start+$length); 

Более подробную информацию о решении можно найти в PHP Manual.

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