7

我正在开发一个需要日语和英语的 php 站点。在大多数地方,让日语正确显示没有问题,但如果我使用这样的功能,我无法让字符显示:

回声.php:

<?php
function draw(){
echo "日本語";
}
draw();
?>

我得到“日本语”

但如果我尝试这个:index.php:

<?php
 some stuff
 include "echo.php";
 draw();
?>

我得到“???”。有什么方法可以让我的回显文件以它可以读取的方式将数据发送到第一个文件?

编辑:该网站可以正常工作,并正确显示日文字符,除非它尝试从 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并调用它:出现了英文链接,但是日语链接显示为问号。

4

7 回答 7

8

您应该将文件编码更改为 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');
于 2012-04-04T07:29:53.443 回答
3

您的问题肯定与字符编码有关。尝试检查以下内容:

  • 所有 PHP 脚本中的所有字符串都是 Unicode(UTF-8 是一个非常常见的选择)。在必要时使用utf8_encode()和/或utf8_decode()在您的字符串上强制使用 UTF-8。
  • 您的服务器将 PHP 输出作为 Unicode(UTF-8,最好但不一定是 gzip 压缩数据)发送
  • 您的浏览器理解并接受 Unicode (UTF-8)。通常浏览器会发送请求Accept-Charset: UTF-8,*;q=0.5GET提示它的 Unicode 功能。

最后,我使用 PHP 5.3.6 版和 Firefox、Chrome 和 IE 9 检查了您的代码。Firefox 和 Chrome 按预期打印日文字符。只有 IE 9 不能正确打印。窥探GETIE 的请求显示,它确实没有发送任何Accept-Charset: UTF-8,*;q=0.5. 我不完全确定如何强制 IE 发送它,因为在我的情况下,显然我的服务器(Apache)和 PHP 肯定会发送 UTF-8 字符串。

还有一个提示 - 您可以尝试将您的字符串转换为HTML 实体。例如 -echo "&#x00A9;";将打印©. 但是,我不是 100% 确定如何使用 PHP 将所有字符串转换为 HTML 实体。我尝试使用htmlentities()and未成功htmlspecialchars()。但是,它并没有改变 IE 的任何东西。

于 2012-04-04T08:55:14.317 回答
2

我有同样的问题。但我处理它。

将“echo.php”的编码转换为 EUC-JP 或 SHIFT-JIS。

<?php
function draw(){
echo mb_convert_encoding("日本語", 'UTF-8', array('EUC-JP', 'SHIFT-JIS', 'AUTO'));
}
draw();
?>

这对我有用:)

于 2013-07-03T03:58:08.923 回答
1

charset未定义或不正确时会发生这种情况。

您可以使用元标记来定义字符集。根据需要在页面头部放置以下元标记,它将正确呈现。

HTML 4

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

HTML 5

<meta charset="utf-8" />
于 2012-04-04T07:38:55.520 回答
0

将以下元标记添加到标题

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta http-equiv="Content-Language" content="ja" />
于 2012-04-04T07:36:44.283 回答
0

MySQL 和 PHP 需要处理相同的字符集。

尝试添加..

mysqli_set_charset("utf8");

..连接到您的数据库后。总是为我工作!

于 2014-05-29T00:55:49.010 回答
0

如果您使用 php 和 mssql,您还需要在 mssql 连接字符串中指定字符集。

像这样:

$connectionInfo = array("Database"=>"db name", "UID"=>"username", "PWD"=>"pw","CharacterSet" => "UTF-8");
$serverName = "server";
$conn = sqlsrv_connect($serverName, $connectionInfo);

请注意,您仍然需要执行上面建议的操作,像这样 HTML 5 声明您的 html 字符集:

<meta charset="utf-8" />

像这样的php字符集:

header('content-type: text/html; charset=utf-8');
于 2018-03-30T16:50:19.973 回答