无法显示德国变音符号

Pet*_*ter 2 php mysql character-encoding str-replace

我现在的主要问题是我无法在我的网页上显示"ä,ü,ö",显示为 ,当我用"回声"显示我的脚本时它们看似正常,当我运行它包含在我的html中时页面我得到了 .

在我尝试了几个关于这个主题的内容后,我无法找到解决问题的方法.

我正在使用.xls读取.xls文件到php阅读器.我从这样的字段中获取数据:

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; }
Run Code Online (Sandbox Code Playgroud)

哪个运行得很好.然后我将所有这些返回值保存在一个数组中.我循环使用它们将它们保存到mysql数据库中.

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

我用来改变字母的方法如下:

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

在我的数据库表中,它们仍然保存为"ä,ö,ü".表本身在utf8_bin中.我在html文件的标题中尝试了这个:

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<html lang="de">
Run Code Online (Sandbox Code Playgroud)

以及我用来读取db的文件中的这个.

header('Content-Type: text/html; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)

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

foreach($menues as $r){
    echo urlencode($r);
}
Run Code Online (Sandbox Code Playgroud)

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

有没有一点我错过了charset或做了一些特别错误的事情?

Ger*_*den 6

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

SET NAMES utf8
Run Code Online (Sandbox Code Playgroud)

有关使用MySQL和PHP时常见编码错误的逐步说明,请参阅此博客文章.

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