4

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

    $myFile = "page.htm";

$fh = fopen($myFile, 'w') 或 die("无法打开文件"); 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 页面上查看它时我看到问号 � 字符而不是我最初想要的字符。为什么?!提前致谢!

4

8 回答 8

6

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

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

澄清一下,这应该在包含您的 html 文件的 PHP 中,而不是在您包含的 html 文件中:)

支点:

  1. 使用完整的开始标签 <?php 而不是 <? 因为并非所有(许多)服务器都支持
  2. include 是一个语句而不是一个函数,所以通常你会写: include 'page.htm';
于 2010-07-02T00:26:29.857 回答
6

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

于 2010-07-02T06:35:46.153 回答
4

我解决header('Content-Type: text/html; charset=iso-8859-1');了在包含包含的 php 网页中添加它的问题。我不知道为什么它有效。我从未使用过 iso-8859-1 字符集。不管怎么说,还是要谢谢你!

于 2010-07-02T08:09:38.160 回答
2

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

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

于 2011-10-27T10:16:24.167 回答
1

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

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

于 2010-07-01T22:43:05.243 回答
1

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

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

<?php
 include("php2.php");
?>enter code here
于 2013-10-07T19:30:18.930 回答
1

关于您的代码的一点:

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

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

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

于 2013-09-08T12:14:45.137 回答
1

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

我的解决方法:

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

我希望它有所帮助,我假设原始文件中的一些元数据是破坏性的。但这只是猜测。

于 2020-03-22T10:09:05.533 回答