dqxsuig64994 2010-12-21 10:02 采纳率: 0%
浏览 31
已采纳

PHP CodeIgniter翻译特殊字符

Is there any Helper class available for codeigniter to translate german characters to pass thme in URL?

for example

ä = ae, ü = ue, ß=ss, ö=oe

Thanks in advance.

  • 写回答

2条回答 默认 最新

  • douqingji3026 2010-12-21 11:34
    关注

    PyroCMS has some basic character conversion but it could be improved upon:

    if ( ! function_exists('url_title'))
    {
        function url_title($str, $separator = 'dash', $lowercase = FALSE)
        {
            $CI =& get_instance();
    
            $foreign_characters = array(
                '/ä|æ|ǽ/' => 'ae',
                '/ö|œ/' => 'oe',
                '/ü/' => 'ue',
                '/Ä/' => 'Ae',
                '/Ü/' => 'Ue',
                '/Ö/' => 'Oe',
                '/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ|А/' => 'A',
                '/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª|а/' => 'a',
                '/Б/' => 'B',
                '/б/' => 'b',
                '/Ç|Ć|Ĉ|Ċ|Č|Ц/' => 'C',
                '/ç|ć|ĉ|ċ|č|ц/' => 'c',
                '/Ð|Ď|Đ|Д/' => 'D',
                '/ð|ď|đ|д/' => 'd',
                '/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě|Е|Ё|Э/' => 'E',
                '/è|é|ê|ë|ē|ĕ|ė|ę|ě|е|ё|э/' => 'e',
                '/Ф/' => 'F',
                '/ф/' => 'f',
                '/Ĝ|Ğ|Ġ|Ģ|Г/' => 'G',
                '/ĝ|ğ|ġ|ģ|г/' => 'g',
                '/Ĥ|Ħ|Х/' => 'H',
                '/ĥ|ħ|х/' => 'h',
                '/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ|И/' => 'I',
                '/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı|и/' => 'i',
                '/Ĵ|Й/' => 'J',
                '/ĵ|й/' => 'j',
                '/Ķ|К/' => 'K',
                '/ķ|к/' => 'k',
                '/Ĺ|Ļ|Ľ|Ŀ|Ł|Л/' => 'L',
                '/ĺ|ļ|ľ|ŀ|ł|л/' => 'l',
                '/М/' => 'M',
                '/м/' => 'm',
                '/Ñ|Ń|Ņ|Ň|Н/' => 'N',
                '/ñ|ń|ņ|ň|ʼn|н/' => 'n',
                '/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ|О/' => 'O',
                '/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º|о/' => 'o',
                '/П/' => 'P',
                '/п/' => 'p',
                '/Ŕ|Ŗ|Ř|Р/' => 'R',
                '/ŕ|ŗ|ř|р/' => 'r',
                '/Ś|Ŝ|Ş|Š|С/' => 'S',
                '/ś|ŝ|ş|š|ſ|с/' => 's',
                '/Ţ|Ť|Ŧ|Т/' => 'T',
                '/ţ|ť|ŧ|т/' => 't',
                '/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ|У/' => 'U',
                '/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ|у/' => 'u',
                '/В/' => 'V',
                '/в/' => 'v',
                '/Ý|Ÿ|Ŷ|Ы/' => 'Y',
                '/ý|ÿ|ŷ|ы/' => 'y',
                '/Ŵ/' => 'W',
                '/ŵ/' => 'w',
                '/Ź|Ż|Ž|З/' => 'Z',
                '/ź|ż|ž|з/' => 'z',
                '/Æ|Ǽ/' => 'AE',
                '/ß/'=> 'ss',
                '/IJ/' => 'IJ',
                '/ij/' => 'ij',
                '/Œ/' => 'OE',
                '/ƒ/' => 'f',
                '/Ч/' => 'Ch',
                '/ч/' => 'ch',
                '/Ю/' => 'Ju',
                '/ю/' => 'ju',
                '/Я/' => 'Ja',
                '/я/' => 'ja',
                '/Ш/' => 'Sh',
                '/ш/' => 'sh',
                '/Щ/' => 'Shch',
                '/щ/' => 'shch',
                '/Ж/' => 'Zh',
                '/ж/' => 'zh',
            );
    
            $str = preg_replace(array_keys($foreign_characters), array_values($foreign_characters), $str);
    
            $replace = ($separator == 'dash') ? '-' : '_';
    
            $trans = array(
                '&\#\d+?;' => '',
                '&\S+?;' => '',
                '\s+' => $replace,
                '[^a-z0-9\-\._]' => '',
                $replace.'+' => $replace,
                $replace.'$' => $replace,
                '^'.$replace => $replace,
                '\.+$' => ''
            );
    
            $str = strip_tags($str);
    
            foreach ($trans as $key => $val)
            {
                $str = preg_replace("#".$key."#i", $val, $str);
            }
    
            if ($lowercase === TRUE)
            {
                if( function_exists('mb_convert_case') )
                {
                    $str = mb_convert_case($str, MB_CASE_LOWER, "UTF-8");
                }
                else
                {
                    $str = strtolower($str);
                }
            }
    
            $str = preg_replace('#[^'.$CI->config->item('permitted_uri_chars').']#i', '', $str);
    
            return trim(stripslashes($str));
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

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