即使尽可能设置了 UTF-8,也无法显示德语变音符号

Can't display german umlauts even if UTF-8 is set wherever possible

让我解释一下情况。

  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">

我读了一些关于字符编码的理论,字符编码的历史和万能的 UTF-8 可以解决你所有的问题,这根本不是真的。有什么问题吗?

首先,确定您损坏的字符的确切字节值。在不知道的情况下,您无法识别要使用的编码。

echo urlencode($string_with_umlauts);

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

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

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

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

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;

}

但是没有更好的解决办法吗?