即使尽可能设置了 UTF-8,也无法显示德语变音符号
Can't display german umlauts even if UTF-8 is set wherever possible
让我解释一下情况。
- 我在使用 PHP 4 的一些旧公司服务器上工作。安装了 Windows 2000NT 和一个可以用 Microsoft Access 2000 打开的数据库。
- 没有任何设置字符编码的选项(与 phpMyAdmin 不同),但我可以在 MS Access 中正确读取该字符。
- 我正在从我的 .php 文件中的数据库中提取数据并将其显示在我的网站上,但是像这样的字符:
ü, ä, ß
显示错误,如下所示:�
- 所有 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;
}
但是没有更好的解决办法吗?
让我解释一下情况。
- 我在使用 PHP 4 的一些旧公司服务器上工作。安装了 Windows 2000NT 和一个可以用 Microsoft Access 2000 打开的数据库。
- 没有任何设置字符编码的选项(与 phpMyAdmin 不同),但我可以在 MS Access 中正确读取该字符。
- 我正在从我的 .php 文件中的数据库中提取数据并将其显示在我的网站上,但是像这样的字符:
ü, ä, ß
显示错误,如下所示:� - 所有 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;
}
但是没有更好的解决办法吗?