PHP包含html页面charset问题

时间:2010-07-01 22:38:54

标签: php character-encoding utf-8 diacritics

使用下面的代码查询mysql数据库后,我生成了一个html文件:

    $myFile = "page.htm";

$ fh = fopen($ myFile,'w')或死(“无法打开文件”);   fwrite($ fh,$ row ['text']);   FCLOSE($ FH);

在msql db上,文本使用utf8_general_ci进行编码。 但我需要将它包含在php网页中,如下所示:

 <?include('page.htm');?>

请记住,php网页在标题上使用了utf8字符集:

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

现在,如果我在db上写了一些带有重音符号(èàì)或引号字符的字母,我直接打开page.htm并在db上我看到它看起来都很好,但是当我在php上查看它时我看到一个问号 字符而不是我原本想要的字符。 为什么?! 提前谢谢!

8 个答案:

答案 0 :(得分:6)

问题是html页面的编码实际上是由http响应标题'Content-Type'设置的,修复你需要做的是在任何输出之前将以下内容添加到你的PHP文件中(即在顶部)。

<?php
header('Content-Type: text/html; charset=utf8');

要澄清一下,那应该是包含你的html文件的PHP,你包含的html文件中的不是:)

侧点:

  1. 最好使用完整的开头标记&lt;?php而不是&lt;?因为所有(许多)服务器都不支持此
  2. include是一个声明而不是一个函数,所以通常你会写:include'page.htm';

答案 1 :(得分:6)

META charset并不总能解决问题。确保您的IDE保存真正的UTF-8文件。对于Dreamweaver中的例子,按CTRL-J然后检查标题/编码选项。

答案 2 :(得分:2)

我解决了在php网页中使用include添加此header('Content-Type: text/html; charset=iso-8859-1');。 我不知道为什么会这样。我从未使用iso-8859-1 charset。 不管怎样,谢谢!

答案 3 :(得分:2)

如果从数据库中获取内容,并且它不明确地更改charset,请注意在Php中,需要将实际的连接字符集显式设置为utf8(如果这是您使用的),否则内容将被转换为转移,即使db本身的内容格式正确..一个有趣的怪癖;)

像这样: mysql_select_db($ database,$ connect); mysql_set_charset('utf8',$ connect); //设置连接字符集。

答案 4 :(得分:1)

问题可能在于mySQL数据库或数据库连接中的编码设置错误。

如果您的表格都是100%utf8_general_ci,请在执行任何查询之前尝试执行mysql_query("SET NAMES utf8;");:这会将连接设置为UTF-8。

答案 5 :(得分:0)

关于您的代码的一点:

当你使用include时,它是一个php代码,所以你应该包含一个php文件,而不是一个htm文件:

<?include('page.php');?>

尝试更改扩展程序,我不知道您的代码到目前为止是如何工作的:)

答案 6 :(得分:0)

尝试 单独包括块。 Ex mainpage.php:

<?php
 include("php1.php");
?>

<?php
 include("php2.php");
?>enter code here

答案 7 :(得分:0)

我知道我要OP迟到10年,但是我遇到了同样的问题。我正在做一个包含php文件(我想它与html文件相同)的文件,但不会显示utf-8。我无法使用meta,因为其中包含的内容是在显示html之后出现的。

我的解决方法:

  1. 将php的整个文本复制到一个新文件中。
  2. 将原始php替换为新文件。

我希望这会有所帮助,我认为原始文件中的一些元数据是断断续续的。但这只是个猜测。