PHP日语echo字符串成了问号


PHP Japanese echo string becomes question marks

我正在开发一个需要日语和英语的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 "&#x00A9;";将打印©。但是,我不能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" />
MySQL和PHP需要处理相同的字符集。

尝试添加。。

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');