2012-07-19 23 views
0

我有一個問題,目前爲止我無法弄清楚,我很感激任何幫助。當在PHP中使用UTF8的hmtlspecialchars時,Umlaute不顯示

我有以下簡單的代碼:

<?php 
header("Content-Type: text/html; charset=utf-8"); 

$body .= "begrüßen zu dürfen"; 

echo htmlentities($body); 
echo htmlentities($body, ENT_COMPAT,'UTF-8'); 

?> 

第一回聲作品,而第二個返回一個空字符串。爲什麼會發生?

變量$ body是一個像「begrüßen zu dürfen」這樣的固定字符串和來自帶有UTF-8的mysql數據庫的一些文本的組合。如果我想正確顯示數據庫中的文本,我們將其稱爲$ data,我需要使用htmlentities($data, ENT_COMPAT,'UTF-8');,所以我想我可以使用htmlentities($body, ENT_COMPAT,'UTF-8')來顯示整個組合文本(部分來自數據庫,部分來自固定字符串) 。但是,這不起作用。

任何想法如何解決這個問題?

+1

你的文件是以UTF-8保存的嗎?由於固定字符串是不工作的,很可能你的php文件實際上不會保存在UTF-8 – Esailija 2012-07-19 12:47:23

+0

不,它是在cp1252(不管它是什麼:))。如果我這樣做,並使用htmlentities($ body,ENT_COMPAT,'UTF-8')它現在顯示一些奇怪的字符,如 。另外,如果我將文件代碼更改爲UTF-8,則在eclipse文本編輯器中將「ü」顯示爲奇怪的字符。有沒有一種方法可以在eclipe中像往常一樣輸入?但是在網頁上顯示正確,並且在連接時與來自DB的某些utf-8編碼數據一起正常工作?非常感謝! – user1513073 2012-07-19 12:54:51

+0

傾聽我們所說的話,將您的文件轉換爲UTF8。這將解決你的問題m8。 – Peon 2012-07-19 13:01:25

回答

0

您必須將您的php文件保存爲UTF-8而非CP1252。

要測試你在做正確,請嘗試:

<?php 
header("Content-Type: text/plain; charset=utf-8"); 
die("öäå"); 

如果顯示了奇怪的字符,有問題的文件沒有保存在UTF-8正確。

請注意,如果您正確使用UTF-8,則不需要使用htmlentities。

+0

模具正常工作,但如果我做htmlentities它不起作用,既沒有參數'UTF-8'(當它什麼都沒有顯示時),也沒有(當它顯示奇怪的字符) – user1513073 2012-07-19 13:03:20

+0

@ user1513073如果您使用'htmlentities'的動機是爲了轉義html,您應該使用'htmlspecialchars'。如果你根本不支持UTF-8,你應該使用'htmlentities',它可以用ASCII字符對任何unicode代碼點進行編碼。但是你既然可以使用UTF-8,我根本沒有看到使用htmlentitites的理由。 – Esailija 2012-07-19 13:04:44

+0

原因是我使用htmlentities,因爲後來我將我的固定字符串與從utf-8中的數據庫中獲得的文本結合起來。只有當我使用htmlentities(...,「UTF-8」)時,此文本才能正確顯示。對不起,我的困惑......這個UTF-8的東西對我來說只是非常令人困惑:) – user1513073 2012-07-19 13:07:15

0

檢查您的文件保存爲UTF8,這個工作對我來說剛剛好:

header("Content-Type: text/html; charset=utf-8"); 
$body = "begrüßen zu dürfen"; 
echo htmlentities($body); 

輸出:

begrüßen zu dürfen 
+0

對我來說,它顯示的是這樣的: begr��enzud�rfen – user1513073 2012-07-19 12:58:26

1

第二種情況,因爲它遇到「無效代碼單元返回一個空字符串序列「。以下工作並返回除unicode字符以外的所有內容。

echo htmlentities($body, ENT_QUOTES | ENT_IGNORE ,"UTF-8"); 

ENT_IGNORE默默地丟棄,而不是返回空字符串無效的代碼單元的序列。

您遇到無效序列的原因是因爲您的php文件的編碼不正確。

+0

謝謝!這似乎工作......但不知道爲什麼:) – user1513073 2012-07-19 13:11:34

相關問題