[英]UTF-8 characters don't display correctly
這是我的 PHP 代碼:
<?php
$result = '';
$str = 'Тугайный соловей';
for ($y=0; $y < strlen($str); $y++) {
$tmp = mb_substr($str, $y, 1);
$result = $result . $tmp;
}
echo 'result = ' . $result;
輸出是:
Тугайный Ñоловей
我能做什么? 我必須將$result
放入 MySQL 數據庫中。
你的文件編碼是什么? 它也應該是UTF8。 你的 http 服務器的默認字符集是什么? 它也應該是 UTF-8。
編碼僅在以下情況下有效:
使用數據庫時,您還必須為數據庫字段設置正確的編碼以及MySQL 客戶端與服務器通信的方式(請參閱mysql_set_charset()
)。 僅字段是不夠的,因為您的 MySQL 客戶端(在本例中為 PHP)可以默認設置為 ISO 並重新解釋數據。 所以你最終得到了 UTF8 DB -> ISO 客戶端 -> 注入到 UTF8 PHP 腳本中。 難怪為什么最后搞砸了:-)
如何使用正確的字符集提供文件?
header('Content-type: text/html; charset=utf-8')
是一種解決方案
包含AddDefaultCharset UTF-8
.htaccess 文件是另一個
HTML 元內容類型也可能有效,但使用 HTTP 標頭發送此信息總是更好。
PS:您還必須使用mb_strlen()
因為 UTF8 字符串上的strlen()
可能會報告超過實際長度。
如果您要發送混合數據並且不想使用 php 標頭指定 utf-8,則可以將此 html 添加到您的頁面:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
我想,您的代碼采用windows-1251
編碼,因為它是俄語 :) 將您的字符串轉換為 utf-8:
$str = iconv('windows-1251', 'utf-8', $str);
如果您的數據庫是 UTF-8,那么 mysql 就可以了。
對於你的回聲,如果你在網站上做,把它放在首頁:
header('Content-Type: text/html; charset=UTF-8');
只需在與服務器連接后的開頭添加此行:
mysqli_set_charset($conn,"utf8");
如果您只是使用沒有 html 標題等的 php echo,這對我來說非常有用。
$connect = mysqli_connect($host_name, $user_name, $password, $database); mysqli_set_charset($connect,"utf8");
嘗試這個:
header('Content-Type: text/html; charset=UTF-8');
header("Content-type: application/octetstream");
header("Pragma: no-cache");
header("Expires: 0");
//print "$name_field\n$data";
// با این کد درست شد
print chr(255) . chr(254) . mb_convert_encoding("$name_field\n$data", 'UTF-16LE', 'UTF-8');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.