Php Can';即使尽可能设置了UTF-8,也不能显示德国umlauts

Php Can';即使尽可能设置了UTF-8,也不能显示德国umlauts,php,sql-server,encoding,utf-8,character-encoding,Php,Sql Server,Encoding,Utf 8,Character Encoding,让我详细解释一下情况 我正在使用PHP4处理一些旧的公司服务器。安装了Windows 2000NT,我可以用Microsoft Access 2000打开一个数据库 没有任何选项可以设置字符编码(与phpMyAdmin不同),但我可以在MS Access中正确读取该字符 我正在从数据库中提取.php文件中的数据并将其显示在我的网站上,但是像:u,ä,ß这样的字符显示错误,如下所示:� 所有php/html文件都由某些旧版本的Notepad++保存为UTF-8编码,并包含: 我读了一些关于字符

让我详细解释一下情况

  • 我正在使用PHP4处理一些旧的公司服务器。安装了Windows 2000NT,我可以用Microsoft Access 2000打开一个数据库
  • 没有任何选项可以设置字符编码(与phpMyAdmin不同),但我可以在MS Access中正确读取该字符
  • 我正在从数据库中提取.php文件中的数据并将其显示在我的网站上,但是像:
    u,ä,ß
    这样的字符显示错误,如下所示:�
  • 所有php/html文件都由某些旧版本的Notepad++保存为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;
    
    }


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

    您可以尝试转换字符,使用urlencode()我得到%DF表示ß、%E4表示ä和%F6表示ö。这与Windows-1252编码匹配。我将html元标记更改为,但结果仍然相同�.您应该更改字符串的编码,因为这是一个简单的一步过程,而不是更改编码的声明,因为这至少发生在两个地方-HTTP头优先于HTML信息,并且您没有更改HTTP头,是吗?此外,使用UTF-8使一切变得更加容易,并允许从用户那里接收每一个可能的字符。你不应该坚持做别的事情。:)感谢您的努力,但我不完全理解,如何更改哪些字符串的编码?不幸的是,该服务器不支持iconv()。有多个函数处理更改编码,例如
    utf8\u encode()
    假设您有ISO-8859-1字符串-如果您假设Windows-1252有一些小细节错误,这大致正确,即Windows-1252允许对ISO-8859-1中未定义的更多字符进行编码。是。使用
    iconv()
    函数。