2010-07-01 18 views
3

下面我已生成的HTML文件查询MySQL数据库使用的代码后:PHP包括HTML页面的字符集问题

$myFile = "page.htm"; 

$ FH =的fopen($ MYFILE, 'W')或死亡(“罐” t打开文件“); fwrite($ fh,$ row ['text']); fclose($ fh);

在msql db上,文本使用utf8_general_ci编码。 但我需要将其包含在PHP网页,如下图所示:

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

铭记的PHP网页上的标题上使用UTF-8字符集:

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

现在,如果我写的数据库一些字母与重音(èàì)或引号字符,我直接打开page.htm和分贝我看到这一切看起来不错,但是当我在php页面上查看它时,我看到一个问号 字符而不是我最初想要的。 为什么? 在此先感谢!

回答

1

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

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

+0

我还增加了mysql_query(“SET NAMES utf8;”);但没有。 – EnneKappa 2010-07-02 07:57:20

+0

对于任何通用的UTF-8问题都没有可能的解决方案。在HTML中转义的标题,内容与在JSON中转义与在输入字段中转义与在PUT中转义与在MySQL中转义 - 没有任何东西需要真正关注。 – HoldOffHunger 2016-08-08 00:08:43

5

问题是,html页面的编码实际上是由http响应头'Content-Type'设置的,要解决你需要做的就是在你的PHP文件添加任何输出之前(即在最佳)。

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

要澄清,这应该是在包含HTML文件的PHP,在HTML文件时,包括:)

侧点(S):

  1. 这是好的做法是使用全开标签<?php而不是<?因为这不是所有(许多)服务器都支持的。
  2. include是一个语句而不是函数,所以通常你会写:include'page.htm';
+0

我已经在生成html的php网页中添加了这个,并且在包含php的网页中也添加了这个,但问题仍然存在。 – EnneKappa 2010-07-02 07:56:37

5

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

+0

我使用记事本+ +和我保存UTF8中的所有文件(没有BOM) – EnneKappa 2010-07-02 07:57:40

2

我解决了在php的网页中使用include添加这个header('Content-Type: text/html; charset=iso-8859-1');。 我不知道它为什么有效。我从来没有使用ISO-8859-1字符集。 无论如何,谢谢!

+0

不好的做法,如果你想动态包括,你需要在所有文件中添加标题... – pirs 2014-02-01 16:31:30

+0

如果工作,而不是charset = utf-8,那么你的文档的编码可能不是UTF-8。 – HoldOffHunger 2016-08-08 00:07:33

2

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

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

当你使用include,它是一个PHP代码,所以你应该包括PHP文件,而不是一个htm文件:关于你的代码

0

一点

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

尝试更改扩展名,我不知道你的代码是如何工作到现在为止:)

0

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

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

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