PHP日语回声字符串成为问号

时间:2012-04-04 07:25:17

标签: php

我正在开发一个需要日语和英语的php网站。在大多数地方我都可以正确地显示日语,但如果我使用这样的函数,我就无法显示这些字符:

echo.php:

<?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并调用它:出现英文链接,但是日语链接显示为问号。

7 个答案:

答案 0 :(得分: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');

答案 1 :(得分:3)

你的问题肯定与character encoding有关。请尝试检查以下内容:

  • 所有PHP脚本中的所有字符串都是Unicode(UTF-8是一种非常常见的选择)。在必要时使用utf8_encode()和/或utf8_decode()强制在字符串上使用UTF-8。
  • 您的服务器以PHP格式发送PHP输出(UTF-8,最好是,但不一定是gzip压缩数据)
  • 您的浏览器理解并接受Unicode(UTF-8)。通常,浏览器会在Accept-Charset: UTF-8,*;q=0.5请求中发送GET来暗示它的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 entities。例如 - echo "&#x00A9;";会打印©。但是,我不是100%确定如何使用PHP将所有字符串转换为HTML实体。我使用htmlentities()htmlspecialchars()尝试失败。但是,它没有改变IE的任何内容。

答案 2 :(得分:2)

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

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

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

这对我有用:)

答案 3 :(得分:1)

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

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

HTML 4

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

HTML 5

<meta charset="utf-8" />

答案 4 :(得分:0)

将以下元标记添加到标题

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta http-equiv="Content-Language" content="ja" />

答案 5 :(得分:0)

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

尝试添加..

mysqli_set_charset("utf8");

..连接到您的数据库后。永远都适合我!

答案 6 :(得分:0)

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

像这样:

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

请注意,您仍需要执行上述建议 声明你的html charset就像这个HTML 5:

<meta charset="utf-8" />
像这样的php charset:

header('content-type: text/html; charset=utf-8');
相关问题