12

私が実行しているいくつかの文字列置換がマルチバイトセーフであることを確認したい. ネットで mb_str_replace 関数をいくつか見つけましたが、遅いです。おそらく500〜900バイトを通過させた後、20%の増加を話している.

推奨事項はありますか?preg_replace はネイティブでコンパイルされているため、より高速になる可能性があるため、使用することを考えています。任意の考えをいただければ幸いです。

4

4 に答える 4

18

そこで述べたように、すべてのパラメーターが utf-8 で有効である限り、str_replace は utf-8 コンテキストで安全に使用できます。これは、マルチバイトでエンコードされた両方の文字列があいまいに一致しないためです。入力の有効性を確認すれば、別の関数を探す必要はありません。

于 2013-01-14T10:30:44.527 に答える
3

あらゆる場所 (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;
   }
}
于 2014-04-23T14:51:54.563 に答える