2015-05-30 36 views
2

我现在的主要问题是,我无法在我的网页上显示“ä,ü,ö”,显示为 ,当我用“回声”显示我的脚本时,它们看起来很正常,当我从我的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; } 

它运行得很好。 然后我将所有这些返回值保存在一个数组中。我循环他们将它们保存到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; 
} 

在我的数据库,他们仍然得到保存为“A,ö,ü”的表格。 表本身在utf8_bin。 我在HTML文件的头部尝试这样做:

<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”。

有没有一点我想念字符集或者做一些特别错误的事情?

回答

6

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

SET NAMES utf8 

请参考this blog post使用MySQL和PHP时常见的编码错误的一步一步的解释。

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

+0

谢谢!只需在连接文件中使用'array(PDO :: MYSQL_ATTR_INIT_COMMAND =>“SET NAMES utf8”)'完美! –

+0

'PDO:$ db = new PDO('dblib:host = host; dbname = db; charset = UTF-8',$ user,$ pwd); ' –

0

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

+0

可能是因为你的数据被破坏了。请阅读我之前提到的博客bost,它将帮助您进一步解决此问题。 –

+0

通过仅使用连接上的'array(PDO :: MYSQL_ATTR_INIT_COMMAND =>“SET NAMES utf8”)'来读出它的工作原理 –