2016-05-18 17 views
1

私は...そう...省略記号はsubstr_replaceを壊すのはなぜですか?

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

ようsubstr_replace()を使用している場合はそれがうまく動作しますが、省略記号の変更がちょうどコロン場合、私は取得(開始位置を変更しない)...

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オフセットを打ち消すために省略記号を3つの別個の文字にすることはできますか?エンコードの問題ですか?

答えて

0

多くの髪を引っ張った後、私は答えを見つけました:substr_replaceはマルチバイト(utf-8)互換ではありません。ソリューションの

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.

で見つけることができます:ここにはmb_substr_replace()その周りの作業は、上記の例と等価になるのですが、ありませんのよう

関連する問題