簡體   English   中英

PHP:西里爾字母不能正確顯示

[英]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" />

對我而言,造成變化的那一行如下:

$mysqli->set_charset("utf8")

直接來自PHP文檔頁面

將字符集設置為utf8后,服務器返回拉丁語,現在可以正常工作。

我一直在與這個完全相同的問題作斗爭,因為我試圖在小部件上的一些控件中添加一些法語/德語國際化。

存儲在我的數據庫中的帶有重音符號的字符可以打印為UTF-8。 但是,在PHP文件中硬編碼為數組的字符要么顯示為內部帶有問號的黑色菱形,要么顯示為小方框。

我已經嘗試過以各種方式對我的php文件中的硬編碼字符串進行編碼/解碼,但是無法正確顯示字符。

由於我的字符集非常有限,並且嚴格使用HTML,因此我向intl類添加了一些功能,以將字符替換為html實體。

我有這些屬性。

static $accentEntities = array('á' => '&aacute;', 
                               'É' => '&Eacute;',
                               'é' => '&eacute;', 
                               'í' => '&iacute;', 
                               'û' => '&ucirc;', 
                               'ü' => '&uuml;');
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM