Php 为什么省略号会打断substr_替换?
如果我像这样使用Php 为什么省略号会打断substr_替换?,php,character-encoding,Php,Character Encoding,如果我像这样使用substr\u replace() echo substr_replace('Replace: foo', 'bar', 9, 3); // Echoes 'Replace:bar' 。。。它工作得很好,但是如果只更改冒号作为省略号(不更改起始位置),我会得到 但是,如果我更改开始位置,它会工作: echo substr_replace('Replace… foo', 'bar', 11, 3); // Echoes 'Replace… bar' < > >代码>子字符串
substr\u replace()
echo substr_replace('Replace: foo', 'bar', 9, 3);
// Echoes 'Replace:bar'
。。。它工作得很好,但是如果只更改冒号作为省略号(不更改起始位置),我会得到
但是,如果我更改开始位置,它会工作:
echo substr_replace('Replace… foo', 'bar', 11, 3);
// Echoes 'Replace… bar'
< > >代码>子字符串替换()/代码>考虑省略为偏移目的的三个单独字符吗?这是一个编码问题吗?经过长时间的拉扯,我找到了答案:
substr\u replace
与多字节(utf-8)不兼容。
由于没有mb\u substr\u 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);
有关解决方案的更多详细信息,请参阅
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);