无法显示德语变音符号

Can't display german umlaut

我现在的主要问题是我无法在我的网页上显示“ä, ü, ö”,get 显示为 �,当我用 "echo" 显示我的脚本时,它们看起来很正常,当我 运行 它包含在我的 html 页面 我得到 �.

在我尝试了一些我读过的关于这个主题的东西之后,我找不到解决我的问题的方法。

我正在读取带有 .xls 到 php reader 的 .xls 文件。我从这样的字段中获取数据:

function getMenueMonday($connection) {
    $menu = "";
    $startrow = 8;
    $endrow = 16;
    $col1 = 3;
    for ($i = $startrow; $i < $endrow; $i++) {
        $menu .= $connection->sheets[0]["cells"][$i][$col1] . "<br>";
    }
    return $menu; }

其中 运行 非常好。 然后我将所有这些 return 值保存在一个数组中。我循环遍历它们以将它们保存到 mysql 数据库中。

for ($i = 0; $i < 5; $i++) {
    insertMenue(changeAttr($menues[$i]), $days[$i]);
}

我改字母的方法如下:

function changeAttr($content) {
    $search = array("ä", "ö", "ü", "ß", "Ä", "Ö", "Ü");
    $replace = array("&auml;", "&ouml;", "&uuml;", "ss", "&Auml;", "&Ouml;", "&Uuml;");
    $contentrep = str_replace($search, $replace, $content);
    return $contentrep;
}

在我的数据库 table 中,它们仍然保存为“ä, ö, ü”。 table 本身在 utf8_bin 中。 我在 html 文件的 header 中试过这个:

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<html lang="de">

以及我用来读取数据库的文件中的这个。

header('Content-Type: text/html; charset=utf-8');

使用以下代码我得到了这个输出:

foreach($menues as $r){
    echo urlencode($r);
}

"Saisonfr%FCchte" 应该是 "Saisonfrüchte".

有什么地方我错过了字符集或做错了什么吗?

您的连接也必须知道您正在使用的编码,否则会发生一些隐式字符集转换。为此,您可以这样做:

SET NAMES utf8

使用MySQL和PHP时,请参阅this blog post了解常见编码错误的分步说明。

如果每个人都是 "speaking utf-8",则无需使用命名实体引用转义 HTML 中的字符。它甚至可能被认为是不好的做法。

实际上,“ä, ö, ü”之后的所有内容都不会写入数据库... 但是如果数据库中有一个,它就会正确显示。