我的网页上有一些文档存在奇怪的问题。
我的数据存储在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" />
答案 0 :(得分:11)
您必须设置网页的编码。
设置编码有三种方法:
HTML / XHTML :使用HTTP标头:
Content-Type: text/html; charset=UTF-8
HTML :使用元元素:(也可以用于XHTML,但有些不同寻常)
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
仅限XHTML :在序言中设置编码:( XHTML首选)
<?xml version="1.0" encoding="UTF-8"?>
如果您想先验证问题:
首先使用浏览器手动更改编码。如果可行,您可以在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_encoding
或this 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页面和网络服务器的价值不同。