即使在任何可能的情况下设置了UTF-8,也无法显示德语变音符号

时间:2015-02-14 20:46:42

标签: php sql-server encoding utf-8 character-encoding

让我更接近解释一下情况。

  1. 我正在使用PHP 4在旧公司服务器上工作。安装了Windows 2000NT,并且可以使用Microsoft Access 2000打开数据库。
  2. 没有任何设置字符编码的选项(与phpMyAdmin不同),但我可以正确地读取MS Access中的字符。
  3. 我在.php文件中从该数据库中提取数据并将其显示在我的网站上,但是像ü, ä, ß这样的字符显示错误,如下所示:�
  4. 所有php / html文件都被一些旧版本的Notepad ++保存为UTF-8编码并包含: <!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8">
  5. 我读了一些关于字符编码,字符编码历史和全能UTF-8的理论,它将解决你所有的问题,这根本不是真的。可能有什么不对?

2 个答案:

答案 0 :(得分:1)

首先,确定您的破碎字符具有哪些字节值。不知道你无法识别要使用的编码。

echo urlencode($string_with_umlauts);

这会将所有非ascii字符打印为百分比编码的十六进制值。请注意,此功能仅用于其他目的,但在这种情况下它也会有所帮助。

然后查找像维基百科这样的编码表中的字节,并确定你有什么。

最后一步:将转换层添加到数据库访问逻辑,该逻辑将您看到的编码转换为带有iconv函数的UTF-8。

答案 1 :(得分:1)

好吧,我找到了解决方案:

function decode($string){

$string = urlencode($string);
$string = str_replace('%DF','ß',$string);
$string = str_replace('%E4','ä',$string);
$string = str_replace('%F6','ö',$string);
$string = str_replace('%2B','+',$string);
$string = str_replace('%FC','ü',$string);
$string = str_replace('%26','&',$string);
$string = str_replace('%2F','/',$string);
$string = str_replace('%0A','',$string);
$string = str_replace('%0D','',$string);
$string = str_replace('%40','@',$string);
$string = str_replace('%2C',',',$string);
$string = str_replace('%E1','á',$string);
$string = str_replace('%D3','ó',$string);
$string = str_replace('+',' ',$string);

return $string;

}

但是没有更好的解决方案吗?