题
我刚刚在本地测试了我的网络应用程序,一切正常,但上传到服务器应用程序后表现不同。我使用函数 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
但在本地我没有遇到这个问题
解决方案
哪些字符集文件写在?
既然你已经写你想直接替换成你的代码,作为字符串中的字符,他们在编码字符集的任何文件使用。如果字符集从您从浏览器中得到有什么不同,你的功能都没有去上班。
你需要记住的重要一点,就是要始终保持你的字符串编码的字符集的轨道,并转换时neccessary。
看一看科雷Nordmanns FAQ字符集在PHP 的字符集有关的字符集一些更多的指针。
其他提示
我建议您依靠现有的、经过严格测试的代码来执行此操作。我相信所有这些函数都假设 UTF-8 输入和输出 7 位 ASCII:
remove_accents()
来自 WordPress- 德鲁帕尔的 音译 模块(需要做一些工作才能将其从 Drupal 中解开)
utf8_to_ascii()
来自可敬的 PHP UTF8 项目friendly_url()
作者:雅库布·弗拉纳Doctrine_Inflector::urlize()
slugify()
看起来很坚固
不隶属于 StackOverflow