UTF-8问题,没有想法

时间:2009-07-05 06:35:04

标签: php encoding utf-8

我的网页上有一些文档存在奇怪的问题。

我的数据存储在MYSQL数据库中,UTF8编码。如果阅读我的网页显示的值

  

Rezept:Gem semalanders(Gem selaibchen)

我需要ü/ü!

数据库中的内容是“Gemüse......”..

我的error_log中的原始数据如下所示

  

[title] => Rezept:Gemüsemalanders(Gemüselaibchen)

网页标题是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<!--[if IE]>
  <link rel="stylesheet" href="http://www.dev-twitter-gewitter.com/css//blueprint/ie.css" 
        type="text/css" media="screen, projection">
<![endif]-->

<meta name="text/html; charset=UTF-8" content="Content-Type" />

7 个答案:

答案 0 :(得分:11)

您必须设置网页的编码。

设置编码有三种方法:

  1. HTML / XHTML :使用HTTP标头:

    Content-Type: text/html; charset=UTF-8
    
  2. HTML :使用元元素:(也可以用于XHTML,但有些不同寻常)

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
  3. 仅限XHTML :在序言中设置编码:( XHTML首选

    <?xml version="1.0" encoding="UTF-8"?>
    
  4. 如果您想先验证问题:

    首先使用浏览器手动更改编码。如果可行,您可以在HTML文件中进行设置。确保将手动编码重置为自动检测,否则它将在您的工作站上运行,但不能在用户的工作站上运行!

    PHP专业:确保您的内部编码也设置为UTF-8!所有输出都转换为此编码。

    您可以使用每个文件顶部的mb_internal_encoding强制执行内部编码。

    毕竟:如果您的代码实际上不是UTF-8编码的话,这一切都无济于事!如果是,请检查是否有任何可能破坏UTF-8编码的辅助函数。

答案 1 :(得分:8)

MySQL需要知道您希望输出为UTF-8 - 它可能配置为以latin1发送,因此您的浏览器会看到无效的UTF-8字节序列并输出“非字符”字形。

打开MySQL连接后立即发送查询“SET NAMES utf8”,或更改配置(如果可能)。

答案 2 :(得分:4)

只有在编码不正确时才会出现Unicode替换字符 。因此,在您的情况下,您将数据声明为UTF-8编码但不是(至少是您引用的部分)。 ISO 8859-1中编码的ü是0xFC,但这是UTF-8中的无效八位字节。

因此,您需要确保您的数据实际上是使用UTF-8编码的。有些函数可以检查给定的字符串是否为UTF-8,例如mb_detect_encodingthis is_utf8 function

答案 3 :(得分:2)

这样做:

header('Content-Type: text/html; charset=utf-8');
输出任何内容之前

答案 4 :(得分:1)

问题可能是与数据库的连接使用了latin1。这是我所知道的许多MySQL设置中的默认设置。

这意味着,即使您将数据作为utf-8存储在数据库中,也可以在获取时将其作为latin1获取,因为charset会在运行时进行转换以匹配连接。

您有两种选择:

<强> 1。将默认连接字符集更改为utf-8

如果您在同一数据库服务器上托管其他应用程序,并且数据库中存在iso-8859-1,则可能会出现问题,因为更改配置时您将更改MySQL服务器的所有用户的行为。

<强> 2。每次连接数据库后更改连接字符集

如果您使用PHP5,您可以使用内置命令:

mysql_set_charset('utf8');

有关详细信息,请参阅http://php.net/manual/en/function.mysql-set-charset.php

如果您使用的是PHP 4,则可以通过简单的SQL查询来执行此操作:

mysql_query("SET NAMES 'UTF8'");

有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

答案 5 :(得分:0)

utf8_encode解决了我的问题。我不确定为什么(;数据库中的数据是utf8,网站是utf8 ..

答案 6 :(得分:0)

您也应检查HTML标头,尤其是(如果错误)您的网络服务器的配置方式。我在过去遇到类似的问题,这是由apache的配置引起的 - 它被配置为始终在内容类型中发送编码,并且将通过<meta>标记传递的编码覆盖为HTML页面和网络服务器的价值不同。