2011-04-20 125 views
8

顯示這是我的PHP代碼:UTF-8字符不能正確

<?php 
$result = ''; 
$str = 'Тугайный соловей'; 
for ($y=0; $y < strlen($str); $y++) { 
    $tmp = mb_substr($str, $y, 1); 
    $result = $result . $tmp; 
} 
echo 'result = ' . $result; 

輸出是:

Тугайный Ñоловей 

我能做些什麼?我必須將$result放入MySQL數據庫。

回答

15

什麼是你的文件的編碼?它也應該是UTF8。什麼是你的http服務器的默認字符集?它也應該是UTF-8。

  • 文件被正確
  • 服務器通知有什麼傳輸文件的編碼編碼:

    編碼只有工作。

當使用數據庫,你也必須設置正確的編碼爲你的數據庫字段 MySQL客戶端與服務器的通訊方式(見mysql_set_charset())。只有字段是不夠的,因爲您的MySQL客戶端(在這種情況下,PHP)可以默認設置爲ISO並重新解釋數據。所以你最終用UTF8 DB - > ISO client - >注入到UTF8 PHP腳本中。難怪爲什麼它結束了:-)

如何用正確的字符集提供文件?

header('Content-type: text/html; charset=utf-8')是一個解決方案

AddDefaultCharset UTF-8 .htaccess文件是另外一個

HTML元內容類型可能工作太,但它總是不如送使用HTTP頭信息。

PS:您還必須使用mb_strlen(),因爲UTF8字符串上的strlen()可能會報告超過實際長度。

+0

有兩件事要檢查,1)你的數據庫UTf-8,2)你的文檔類型是UTF-8嗎? – afuzzyllama 2011-04-20 16:15:52

+1

5個大問題中的一個很好的答案 – 2011-04-20 16:16:13

+0

@Matthieu耶,傷心......我想這是因爲大多數人用英文工作,不用擔心編碼;-) – Capsule 2011-04-20 16:23:20

1

如果您的數據庫是UTF-8,那麼可以使用mysql。

爲了您的迴音,如果你在一個網站做到這一點,把這個在首頁:

header('Content-Type: text/html; charset=UTF-8'); 
3

我想,你的代碼是在windiws-1251,因爲它是俄羅斯:) 您的字符串轉換爲UTF-8:

$str = iconv('windows-1251', 'utf-8', $str); 
2

如果你要發送的數據的混合,不希望使用PHP的頭,確定UTF-8,你可以這個網站添加到您的網頁:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">