2010-07-01 17 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