我的数据库与我在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;
再次,这里没有喜悦。怎么了?
答案 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'>