<html>
<head>
<title>тест</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
我已经设置了元标记,但是每次打开浏览器(Chrome)时,我都必须转到Tools -> Encoding
并在UTF-8
上设置编码才能使其正常工作。
有没有办法避免此步骤,以便浏览器显示正确的 UTF-8?
您的 Web 服务器可能正在发送具有不同charset
的 Content-Type
标头。这将优先于您的<meta>
标记。使用 curl
在命令行上确认这一点(需要 *nix 系统):
curl -i http://example.com/yourpage.php
查看响应开头的 http 标头并找到Content-Type
标头。
您可以通过以下几种方式解决此问题:
配置您的 Web 服务器(我猜是 Apache)以发送适当的字符集。请参阅 Apache 文档以获取
AddDefaultCharset
。使用
header()
函数仅在脚本中设置Content-Type
标头。喜欢这个:header('Content-Type: text/html; charset=UTF-8');
但是请确保将此调用放在浏览器的任何其他输出之前,否则PHP会阻塞。
正确的顺序是
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>тест</title>
还要在 php 代码的任何其他输出之前,甚至在嵌入的 html 之前包含:
header('Content-Type: text/html; charset=utf-8');
当您使用文本编辑器查看内容时,请尝试查看您的内容:如果文件执行不同,请使用此 PowerShell 脚本将编译更改为 UTF-8。之后,您需要再次将文件上传到Web服务器。
Get-ChildItem *.php -Recurse | ForEach-Object {
$content = $_ | Get-Content
Set-Content -PassThru $_.Fullname $content -Encoding UTF8 -Force}