代码之家  ›  专栏  ›  技术社区  ›  ilija veselica

不同服务器上的不同字符集?

  •  2
  • ilija veselica  · 技术社区  · 15 年前

    我刚刚在本地测试了我的web应用程序,一切正常,但上传到服务器后,应用程序的行为有所不同。我使用formatiraj_string_url函数来转换变音符号并获得干净的url。。。在本地,它可以正常工作,但在服务器上,此函数不能以相同的方式转换它们。

    function formatiraj_string_url($string)
        {
            $string = strtolower($string);
    
            $znak[0] = ' ';
            $znak[1] = 'Å ';
            $znak[2] = 'Å¡';
            $znak[3] = 'Đ';
            $znak[4] = 'đ';
            $znak[5] = 'Č';
            $znak[6] = 'č';
            $znak[7] = 'Ć';
            $znak[8] = 'ć';
            $znak[9] = 'Ž';
            $znak[10] = 'ž';
            $znak[11] = 'Š';
            $znak[12] = 'Đ';
            $znak[13] = 'Č';
            $znak[14] = 'Ć';
            $znak[15] = 'Ž';
            $znak[16] = 'š';
            $znak[17] = 'đ';
            $znak[18] = 'č';
            $znak[19] = 'ć';
            $znak[20] = 'ž';
            $znak[21] = 'Š'; // Å 
            $znak[22] = 'š'; // Å¡
    
            $zamjena[0] = '-';
            $zamjena[1] = 's';
            $zamjena[2] = 's';
            $zamjena[3] = 'd';
            $zamjena[4] = 'd';
            $zamjena[5] = 'c';
            $zamjena[6] = 'c';
            $zamjena[7] = 'c';
            $zamjena[8] = 'c';
            $zamjena[9] = 'z';
            $zamjena[10] = 'z';
            $zamjena[11] = 's';
            $zamjena[12] = 'd';
            $zamjena[13] = 'c';
            $zamjena[14] = 'c';
            $zamjena[15] = 'z';
            $zamjena[16] = 's';
            $zamjena[17] = 'd';
            $zamjena[18] = 'c';
            $zamjena[19] = 'c';
            $zamjena[20] = 'z';
            $zamjena[21] = 's';
            $zamjena[22] = 's';
    
            $string = str_replace($znak, $zamjena, $string);
            $new_string = preg_replace("/[^a-zA-Z0-9-s]/", "", $string);
            return $new_string;
        }
    

    编辑:在str_replace之前,此函数使用preg_replace。在服务器上,出现以下错误:

    Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in /home2/sinjcom/public_html/sinj.com.hr/administracija/include/funkcije.php on line 200
    

    但在当地,我没有这个问题

    2 回复  |  直到 15 年前
        1
  •  2
  •   Epcylon    15 年前

    由于您已经将要替换的字符作为字符串直接写入了代码中,因此它们将以文件使用的任何字符集进行编码。如果该字符集与您从浏览器获得的字符集不同,那么您的函数将无法工作。

    您需要记住的重要一点是,始终跟踪字符串的编码字符集,并在必要时进行转换。

    Kore Nordmanns FAQ about charsets in PHP 有关字符集的更多提示。

        2
  •  3
  •   Steve Clay    15 年前

    我建议您依靠现有的、经过高度测试的代码来完成这项工作。我相信所有这些函数都假定UTF-8输入和输出7位ASCII: