PHP,日文文本打印为问号

时间:2014-03-05 09:11:05

标签: php unicode utf-8

我正在尝试从数组中打印数据:

$card_list = Array(Array("Red", "あかい"), Array("Blue", "あおい"), Array("Green", "みどり"));
foreach ($card_list as $card_row)
{
  print $card_row[0] . " | " . $card_row[1] . "<br />";
}

然而,Chrome和IE。两个输出:

Red | ???
Blue | ??
Green | ???

预期输出为:

Red | あかい
Blue | あおい
Green | みどり

我尝试添加以下内容以使其起作用(从过去的答案到类似问题),但无济于事。

header('Content-Type: text/html; charset=utf-8');
mb_internal_encoding('UTF-8'); 
<meta charset="utf-8" />

是否可以在不转移输入的情况下进行打印?我真的不想那样做。

根据要求,这是我目前正在使用的所有相关代码

<?php

  header('Content-Type: text/html; charset=UTF-8');
  mb_internal_encoding('UTF-8'); 
  $card_list = Array(Array("Red", "あかい"), Array("Blue", "青い"), Array("Green", "みどり"));

?>
<html lang="ja">
  <head>  
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="flashcard_block">
    <?php
      foreach ($card_list as $card_row)
      {
          print $card_row[0] . " | " . $card_row[1] . "<br />";
      }
    ?>
    </div>
  </body>
</html>

3 个答案:

答案 0 :(得分:1)

可能的解决方案:

HTML文档

  • 添加适当的<meta charset="" /><meta http-equiv="Content-Type" />标记,用于声明所述HTML文档的内容类型。

  • php.ini内设置默认字符集(参见SO的Q&amp; A:Setting PHP default encoding to utf-8?

FTP /传输

  • 确保上传的.php文件上传的方式可能会在未重新构建的Unicode字符上将字符更改为???

enter image description here

脚本编写

  • 上述情况也可能发生在某些IDE或文本编辑器上,例如Notepad ++(下面),除非您准备好正确的编码:

enter image description here

所有这一切当然都取决于你不是从数据库中读取,这将是问题的一个额外层面,尽管这是一条黄金法则:

  

开发过程的所有图层必须与同一个Charset对齐。

答案 1 :(得分:0)

首先,我认为确定哪些字符集是在发送到浏览器时编码的内容更好。
如果它们由Shift-jis编码并强制浏览器在utf-8中显示它,它将显示一些奇怪的字符。
虽然您知道它们被编码的字符集是什么,但您可以使用mb_convert_encoding将它们转换为您想要的字符集。

答案 2 :(得分:-1)

将其放在代码的开头

mysql_set_charset("UTF8", $conn);