PHP包含html页面字符集问题

发布于 2024-09-07 12:51:16 字数 598 浏览 2 评论 0原文

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

    $myFile = "page.htm";

$fh = fopen($myFile, 'w') or die("can't open file"); fwrite($fh, $row['文本']); fclose($fh);

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

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

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

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

现在,如果我在 db 上写一些带有重音符号 (è à ì) 的字母或引号字符,我直接打开 page.htm 并在数据库上看到一切看起来都不错,但是当我在 php 页面上查看它时,我看到一个问号 � 字符而不是我最初想要的字符。 为什么?! 提前致谢!

after querying a mysql db using the code below i have generated an html file:

    $myFile = "page.htm";

$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $row['text']);
fclose($fh);

On the msql db the text is encoded using utf8_general_ci.
But i need to include it in a php web page as shown below:

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

bearing in mind that the php web page uses utf8 charset on the header:

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

Now if i write on the db some letters with grave accent (è à ì) or a quote character and i open directly page.htm and on the db i see it all looking ok, but when i view it on the php page i see a question mark � character instead of those I originally wanted.
Why?!
Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

浅笑轻吟梦一曲 2024-09-14 12:51:16

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

META charset isn't always solve the problem. Make sure your IDE saving real UTF-8 files. For exanple in Dreamweaver press CTRL-J then check Title/Encoding options.

往事随风而去 2024-09-14 12:51:16

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

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

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

侧面观点:

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

The problem is that the encoding of the html page is actually set by the http response header 'Content-Type', to fix what you need to do is add the following to your PHP file before any output (ie at the top).

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

To clarify, that should be in the PHP that includes your html file, not in the html file you include :)

side point(s):

  1. It's good practise to use the full opening tag <?php rather than <? as this isn't supported by all (many) servers
  2. include is a statement not a function, so typically you'd write: include 'page.htm';
我乃一代侩神 2024-09-14 12:51:16

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

I solved adding this header('Content-Type: text/html; charset=iso-8859-1'); in the php webpage with the include.
I don't know why it works. I never used iso-8859-1 charset.
Thanks anyway!

梦太阳 2024-09-14 12:51:16

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

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

If you are getting stuff from a database, and it changes charset inexplicitly, note that in Php the actual connection charset to the db needs to be set explicitly to utf8 (if that's what you use), otherwise the content is converted while transfered, even if the content in the db itself is in correct format.. an interesting quirk ;)

Like so:
mysql_select_db($database, $connect);
mysql_set_charset('utf8', $connect); // set the connection charset.

溇涏 2024-09-14 12:51:16

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

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

The problem is probably with a wrong encoding set in your mySQL database, or the database connection.

If your tables are all 100% utf8_general_ci, try doing a mysql_query("SET NAMES utf8;"); before doing any queries: That will set the connection to UTF-8.

萌逼全场 2024-09-14 12:51:16

关于你的代码的一点:

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

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

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

One point about your code:

when you use include, it is a php code, so you should include a php file, not a htm file:

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

try changing the extension, I don't know how your code were working till now :)

坦然微笑 2024-09-14 12:51:16

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

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

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

Try
separate includes blocks.
Ex mainpage.php:

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

<?php
 include("php2.php");
?>enter code here
心凉 2024-09-14 12:51:16

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

我的解决方法:

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

我希望它有帮助,我想原始文件中的一些元数据破坏了一切。但这只是一个猜测。

I know i'm 10 years late for OP, but I encountered same problem. I was doing an include of a php file (I supose it's the same for html file) that wouldn't show utf-8. I couldn't use meta as this include comes after displaying html.

My way to solve:

  1. Copied whole text of php into a new file.
  2. Replaced original php with new file.

I hope it helps, i supose some meta data in original file was breakig everyting. But this is jsut a guess.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文