如何将我的网站的字符集更改为utf8?

时间:2013-12-18 00:03:25

标签: php apache .htaccess utf-8 character-encoding

我的数据库与我在php中编码的页面通信不正确。首先只是一些特殊字符显示不正确,但是当我为我的连接应用mysqli_set_charset并且默认latin1被覆盖以纠正utf8时,我的问题似乎只是改变了,但它没有解决:每当我发送文本到数据库时,它在第一个非ASCII字符之前结束。我搜索了更多,发现在元标记中说明编码是不够的,我必须使用标题。首先,我将header('Content-Type: text/html; charset=utf-8');语句包含在我的某些页面的顶部。取自或插入数据库的文本不正确,但在页面的其余部分,所有特殊字符都显示如下:

此外,在每个文件中调用头函数都不太实用。我是标题的初学者,所以我不知道如何在全球范围内应用这些设置。我知道.htaccess文件可以用于此,我的主机声称支持它,所以我开始尝试它。我尝试了所有建议here的选项,但没有任何改变。

我猜两个问题都有相同的原因:我从服务器获取的文件是在不同的字符集中(我没有证据,但服务器似乎更喜欢拉丁语)。 那么如何在utf8中告诉服务器我想要它们?

apache_request_headers(重要字段)读取的设置:

ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
ACCEPT-LANGUAGE: cs,en-us;q=0.7,en;q=0.3
ACCEPT-ENCODING: gzip, deflate

只有Mozilla Web-Sniffer会看到有关字符集的一些信息(并且语言不同):

Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7
Accept-Language: de,en;q=0.7,en-us;q=0.3

这是我的.htaccess文件:

<FilesMatch ".(html|htm|js|css|php)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
AddCharset UTF-8 .php
</ifModule>
</FilesMatch>

我没有使用“AddCharset UTF-8 .php”,而是使用了替代品,但没有任何效果。但我是初学者,所以可能会有一些错误。

如果我需要完全不同的东西,请指导我。有人建议XML可能会有所帮助,但在这里我失去的甚至超过HTTP标头。

编辑:我无法在相关问题中看到我的答案。是的,它引导我到php.ini,但我只有更多的子问题,而不是答案(那里列出的任何东西都不适合我)。

首先,我服务器的php.ini文件存储在我无法访问的服务器部分。所以我试着创建自己的php.ini文件,希望它能运行。它由我在其他地方找到的代码块组成(我不能承认我理解它):

default_charset = "utf-8";
AddDefaultCharset UTF-8;

[iconv]
iconv.input_encoding = utf-8;
iconv.internal_encoding = utf-8;
iconv.output_encoding = utf-8;

exif.encode_unicode = utf-8;

再次,这里没有喜悦。怎么了?

1 个答案:

答案 0 :(得分:1)

尝试在.htaccess上添加这两行:

AddDefaultCharset UTF-8
AddCharset UTF-8 .htm .html .css .js .php

另请尝试在HTML的<head>部分添加此内容:

<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>