更新XAMPP会更改UTF8编码行为

时间:2014-02-23 21:29:59

标签: php mysql utf-8 xampp

我最近从版本

更新了我的XAMMP

1.7.4

  • Apache 2.2.17
  • MySQL 5.5.8(社区服务器)
  • PHP 5.3.5(VC6 X86 32位)+ PEAR

到版本

1.8.2

  • Apache 2.4.4
  • MySQL 5.5.32(社区服务器)
  • PHP 5.4.25(VC9 X86 32位线程安全)+ PEAR

我有一个函数将UTF8字符串“转换”为ASCII,从而生成有效的文件名。例如: “èàòü”将成为“eaou”

//converts all characters to ASCII equivalent (è->e)
function clearUTF($text){
    $f = array("&amp", "&", "'", "ỳ");
    $r = array("and", "and", "-", "y");
    $text = str_replace($f, $r, html_entity_decode($text));
    // replace non letter or digits by -
    $text = preg_replace('#[^\\pL\d]+#u', '-', utf8_encode($text));
    // trim
    $text = trim($text, '-');
    // transliterate
    if (function_exists('iconv')){
        $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
    }
    // lowercase
    $text = strtolower($text);

    // remove unwanted characters
    $text = preg_replace('#[^-\w]+#', '', $text);
    if (empty($text)){
        return 'n-a';
    }
    return $text;
}

此函数在旧版本的XAMMP上正常工作,但是当我在新版本上运行它时,我得到任何非ascii字符串的“n-a”(例如“andrè”)。我想这与编码或iconv函数有关。任何人都可以解释这种奇怪的行为吗?或者另一种看待问题的方法是:

两个版本的XAMPP之间有什么变化来改变这种行为? 这对于经历相同更新的其他人非常有用。我试图比较php.ini设置,但在那里找不到任何区别。

我应该提一下,作为输入传递的字符串来自数据库。但是对于两个XAMPP版本,表的校对是相同的。

我也尝试删除utf8_encode,但这并没有解决问题。

非常感谢

0 个答案:

没有答案