私が実行しているいくつかの文字列置換がマルチバイトセーフであることを確認したい. ネットで mb_str_replace 関数をいくつか見つけましたが、遅いです。おそらく500〜900バイトを通過させた後、20%の増加を話している.
推奨事項はありますか?preg_replace はネイティブでコンパイルされているため、より高速になる可能性があるため、使用することを考えています。任意の考えをいただければ幸いです。
そこで述べたように、すべてのパラメーターが utf-8 で有効である限り、str_replace は utf-8 コンテキストで安全に使用できます。これは、マルチバイトでエンコードされた両方の文字列があいまいに一致しないためです。入力の有効性を確認すれば、別の関数を探す必要はありません。
あらゆる場所 (utf8 など) からの入力がある場合、エンコーディングは非常に困難なため、マルチバイト セーフな関数のみを使用することを好みます。のためstr_replace
に、私は十分に速いこれを使用しています。
if (!function_exists('mb_str_replace'))
{
function mb_str_replace($search, $replace, $subject, &$count = 0)
{
if (!is_array($subject))
{
$searches = is_array($search) ? array_values($search) : array($search);
$replacements = is_array($replace) ? array_values($replace) : array($replace);
$replacements = array_pad($replacements, count($searches), '');
foreach ($searches as $key => $search)
{
$parts = mb_split(preg_quote($search), $subject);
$count += count($parts) - 1;
$subject = implode($replacements[$key], $parts);
}
}
else
{
foreach ($subject as $key => $value)
{
$subject[$key] = mb_str_replace($search, $replace, $value, $count);
}
}
return $subject;
}
}