duanbaque4230 2010-05-03 14:30
浏览 42
已采纳

multibyte strtr() - > mb_strtr()

Does anyone have written multibyte variant of function strtr() ? I need this one.

Edit 1 (example of desired usage):

Example:
$from = 'ľľščťžýáíŕďňäô'; // these chars are in UTF-8
$to   = 'llsctzyaiŕdnao';

// input - in UTF-8
$str  = 'Kŕdeľ ďatľov učí koňa žrať kôru.';
$str  = mb_strtr( $str, $from, $to );

// output - str without diacritic
// $str = 'Krdel datlov uci kona zrat koru.';
  • 写回答

3条回答 默认 最新

  • dthyxna3894 2010-05-03 15:33
    关注

    I believe strtr is multi-byte safe, either way since str_replace is multi-byte safe you could wrap it:

    function mb_strtr($str, $from, $to)
    {
      return str_replace(mb_str_split($from), mb_str_split($to), $str);
    }
    

    Since there is no mb_str_split function you also need to write your own (using mb_substr and mb_strlen), or you could just use the PHP UTF-8 implementation (changed slightly):

    function mb_str_split($str) {
        return preg_split('~~u', $str, null, PREG_SPLIT_NO_EMPTY);;
    
    }
    

    However if you're looking for a function to remove all (latin?) accentuations from a string you might find the following function useful:

    function Unaccent($string)
    {
        return preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'));
    }
    
    echo Unaccent('ľľščťžýáíŕďňä'); // llsctzyairdna
    echo Unaccent('Iñtërnâtiônàlizætiøn'); // Internationalizaetion
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大