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


How to change charset of my website to utf8?

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

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

我想这两个问题都有相同的原因:我从服务器上得到的文件使用了不同的字符集(我没有证据,但服务器似乎更喜欢拉丁语)那么如何告诉服务器我想要它们在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;

再说一遍,这里没有欢乐。怎么了?

尝试在.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'>