我正在开发一个需要日语和英语的php网站。在大多数地方,我不会遇到让日语正确显示的问题,但如果我使用这样的功能,我就无法显示字符:
echo.hp:
<?php
function draw(){
echo "日本語";
}
draw();
?>
我明白"日本語"
但如果我尝试这样做:index.php:
<?php
some stuff
include "echo.php";
draw();
?>
我得到"???"。有什么方法可以让我的echo文件以读取数据的方式将数据发送到第一个文件吗?
编辑:该网站正常工作,并且正确显示日语字符,除非它试图从php文件中提取函数这是代码:
<html lang="ja">
<head>
<title>Running Projects</title>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body>
<div id="header">
<? php include "layout.php" ?>
</div>
</body>
</html>
在layout.php只是一个包含链接列表的文件的情况下,我在每一页上都有这个,所以链接在每一页面上。另一方面,我必须使用functions.php从数据库中获取一些数据并将其写入页面,因此,我尝试将layout.php放入functions.php中并调用它:出现了英文链接,但日文链接显示为问号。
您应该将文件编码更改为UTF-8,并将网站上的标头设置为UTF-8。
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
在HTML5中,您应该使用:
<meta charset="utf-8" />
或在php 中
header('content-type: text/html; charset=utf-8');
您的问题肯定与字符编码有关。尝试检查以下内容:
- 所有PHP脚本中的所有字符串都是Unicode(UTF-8是一种非常常见的选择)。必要时,使用
utf8_encode()
和/或utf8_decode()
在字符串上强制使用UTF-8 - 您的服务器将PHP输出发送为Unicode(UTF-8,最好是但不一定是gzipped数据)
- 您的浏览器能够理解并接受Unicode(UTF-8)。通常,浏览器会在
GET
请求中发送Accept-Charset: UTF-8,*;q=0.5
,以提示其Unicode功能
最后,我用PHP 5.3.6版本和Firefox、Chrome和IE 9检查了您的代码。Firefox和Chrome按预期打印日语字符。只有IE 9没有正确打印。窥探来自IE的GET
请求显示,它确实没有发送任何Accept-Charset: UTF-8,*;q=0.5
。我不完全确定如何强制IE发送,因为在我的情况下,很明显,我的服务器(Apache)和PHP肯定是在发送UTF-8字符串。
还有一个提示-您可以尝试将字符串转换为HTML实体。例如,echo "©";
将打印©
。但是,我不能100%确定如何使用PHP将所有字符串转换为HTML实体。我尝试使用htmlentities()
和htmlspecialchars()
都没有成功。但是,它并没有改变IE的任何内容。
我也有同样的问题。但我能应付。
将"echo.php"的编码转换为EUC-JP或SHIFT-JIS。
<?php
function draw(){
echo mb_convert_encoding("日本語", 'UTF-8', array('EUC-JP', 'SHIFT-JIS', 'AUTO'));
}
draw();
?>
这对我来说很有效:)
当charset
未定义或不正确时会发生这种情况
您可以使用元标记来定义字符集。根据需要将以下元标记放在页面的头部,它就会正确呈现。
HTML 4
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
HTML 5
<meta charset="utf-8" />
将以下元标签添加到标题
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta http-equiv="Content-Language" content="ja" />
尝试添加。。
mysqli_set_charset("utf8");
连接到数据库后。总是对我有用!
如果使用php和mssql,还需要在mssql连接字符串中指定字符集。
像这样:
$connectionInfo = array("Database"=>"db name", "UID"=>"username", "PWD"=>"pw","CharacterSet" => "UTF-8");
$serverName = "server";
$conn = sqlsrv_connect($serverName, $connectionInfo);
请注意,你仍然需要做上面建议的事情像这样声明你的html字符集HTML5:
<meta charset="utf-8" />
php字符集如下:
header('content-type: text/html; charset=utf-8');