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

我刚刚在本地testing了我的Web应用程序,一切工作正常,但上传到服务器应用程序后行为有所不同。 我使用函数formatiraj_string_url来转换拨号符号,并得到干净的url…本地它工作正常,但在服务器上这个function不会转换他们相同的方式。

几天之前,我在第三台服务器上testing了一下,它运行的很好。 现在,我正在上传Web以再次在第三台服务器上进行testing,但是我只是想知道这种行为的真正原因是什么?

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 

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

哪个字符集是你的文件写入?

既然你已经写了你想直接替换成你的代码的字符,就像字符串一样,它们被编码成文件使用的字符集。 如果这个字符集和浏览器的字符集不一样,你的函数就不能工作。

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

看看Kore Nordmanns关于PHP中charsets的常见问题,了解一些关于charsets的更多的指针。

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

  • 从WordPress的remove_accents()
  • Drupal的音译模块(需要一点工作才能从Drupal中解开)
  • utf8_to_ascii()来自历史悠久的PHP UTF8项目
  • friendly_url()通过JakubVrána
  • Doctrine_Inflector::urlize()
  • slugify()看起来很稳固