PHP包含HTML页面字符集问题

问题描述 投票:4回答:8

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

    $myFile = "page.htm";

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

在msql数据库上,使用utf8_general_ci对文本进行编码。但是我需要将其包含在php网页中,如下所示:

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

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

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

现在,如果我在数据库上写一些带有重音符号(èàì)或引号的字母,然后直接打开page.htm,然后在数据库上我就看到一切正常,但是当我在php页面上查看时我看到一个问号-字符,而不是我最初想要的字符。为什么?!预先感谢!

php character-encoding utf-8 diacritics
8个回答
6
投票

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

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

为澄清起见,它应该在包含您的html文件的PHP中,不是在您包含的html文件中:)

侧边:

  1. 使用完整的开始标记
  2. include是不是函数的语句,因此通常您会写:include'page.htm';

6
投票

META字符集并不总是能解决问题。确保您的IDE保存了真实的UTF-8文件。对于Dreamweaver中的示例,请按CTRL-J,然后选中“标题/编码”选项。


3
投票

我解决了在包含附件的php网页中添加此header('Content-Type: text/html; charset=iso-8859-1');的问题。我不知道为什么会这样。我从未使用过iso-8859-1字符集。还是谢谢!


2
投票

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

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


1
投票

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

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


0
投票

关于您的代码的一点:

[当使用include时,它是一个php代码,因此您应包括一个php文件,而不是htm文件:

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

尝试更改扩展名,直到现在我都不知道您的代码如何工作:)


0
投票

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

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

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

0
投票

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

我的解决方法:

  1. 将php的全文复制到一个新文件中。
  2. 用新文件替换了原始php。

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

© www.soinside.com 2019 - 2024. All rights reserved.