簡體   English   中英

UTF-8 字符顯示不正確

[英]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.

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