为什么省略号会破坏substr_replace?

时间:2016-05-18 17:37:18

标签: php character-encoding

如果我这样使用(check-sat) ......

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' 是否将省略号视为三个单独的字符以进行抵消?这是编码问题吗?

1 个答案:

答案 0 :(得分: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.