[英]PHP: Cyrillic characters not displayed correctly
最近,我將托管服務從一個提供商切換到了另一個提供商,但在顯示西里爾字母時遇到了問題。 從數據庫讀取的字符正確顯示,但是在php文件中硬編碼的字符卻沒有顯示(它們顯示為問號)。
包含php源代碼的文件以utf-8格式保存。 幫助任何人?
嘗試在標頭部分放置一個表示編碼的meta標簽:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
我的PHP模塊完全有同樣的問題,所有文本都像“ ?????????????????”
我的代碼是用Notepad ++編寫的。 我找到了解決問題的方法。 問題不在標題字符集或元標記中,因為瀏覽器實際上知道它是UTF-8字符集。 我從瀏覽器嘗試了所有編碼,結果都是一樣的,所以我知道問題出在別的地方,根本不是瀏覽器的字符編碼。
我剛剛用Notepad ++打開了PHP模塊並選擇了所有代碼。 之后,在“編碼”菜單中,我選擇了“轉換為UTF-8”。 上傳到服務器后,所有內容都像一個超級按鈕。
這個問題似乎很奇怪。
這些問號的形式是什么? 是帶有疑問的黑鑽石還是僅僅是問號?
首先,請仔細檢查您的文件是否真的是utf-8
編碼。
嘗試將此標頭添加到您的代碼中(在所有輸出上方)
header('Content-Type: text/html; charset=utf-8');
但是我懷疑這會有所幫助,因為您的數據庫文本已經看起來不錯。
您的代碼中是否有任何SET NAMES
查詢? 它設置了什么charset
集?
在連接數據庫后放這個:
mysql_query("SET NAMES UTF8");
對於mysqli
mysqli_query($connecDB,"SET NAMES UTF8");
並在頁面標題中:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
它與php文件的編碼有關。 這些文件是使用Windows記事本創建的,並以utf-8編碼保存。
當我使用Notepad2打開文件時,文件的編碼為“帶簽名的utf-8”。 當我將編碼更改為“ utf-8”時,文本正確顯示。
出現問題的原因通常是程序員的編輯器意外地重新編碼了腳本文件。 硬編碼依賴於php文件中編碼的字符串不是一個好習慣。
嘗試切換瀏覽器的編碼,以找到用於硬編碼文本的編碼,這可能有助於您解決此問題。 還要確保為每個頁面發送正確的http標頭:
header('Content-Type: text/html; charset=utf-8');
可選地,您可以在HTML中插入meta標簽:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
我一直在與這個完全相同的問題作斗爭,因為我試圖在小部件上的一些控件中添加一些法語/德語國際化。
存儲在我的數據庫中的帶有重音符號的字符可以打印為UTF-8。 但是,在PHP文件中硬編碼為數組的字符要么顯示為內部帶有問號的黑色菱形,要么顯示為小方框。
我已經嘗試過以各種方式對我的php文件中的硬編碼字符串進行編碼/解碼,但是無法正確顯示字符。
由於我的字符集非常有限,並且嚴格使用HTML,因此我向intl類添加了一些功能,以將字符替換為html實體。
我有這些屬性。
static $accentEntities = array('á' => 'á',
'É' => 'É',
'é' => 'é',
'í' => 'í',
'û' => 'û',
'ü' => 'ü');
static $accents = array();
static $entities = array();
我在構造函數中設置了一些替換數組...
foreach (self::$accentEntities as $char => $entity) {
self::$accents[] = $char;
self::$entities[] = $entity;
}
然后,當我在班級中需要一個硬編碼的字符串之一時,我就這樣返回它...
return str_replace(self::$accents,self::$entities,$str);
這是一個完全的貧民窟解決方案……但目前為止,它仍然有效。 我絕對希望聽到正確的方法來顯示被硬編碼到PHP文件中的重音符號/特殊字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.