簡體   English   中英

將文件內容輸出為UTF-8會導致字符編碼問題

[英]Outputting file contents as UTF-8 leads to character encoding issues

我將標題設置如下:

header( 'Content-Type: text/html; charset="utf-8"' );

然后使用以下代碼段將服務器上的本地文件輸出到瀏覽器:

$content = file_get_contents($sPath);
$content = mb_convert_encoding($content, 'UTF-8');
echo $content;

我在服務器上擁有的文件是由lua創建的,因此,以下輸出為FALSE (轉換前):

var_dump( mb_detect_encoding($content) );

這些文件包含一些字符,例如™ )等,它們在瀏覽器中顯示為普通方形框。 我已閱讀以下被建議為類似問題的線程,並且我的代碼中的所有變體都無濟於事:

當我簡單地使用以下內容時,似乎沒有問題:

header( 'Content-Type: text/html; charset="iso-8859-1"' );
// setting path here
$content = file_get_contents($sPath);
echo $content;

當我簡單地使用以下內容時,似乎沒有問題:

 header( 'Content-Type: text/html; charset="iso-8859-1"' ); // setting path here $content = file_get_contents($sPath); echo $content; 

因此,這意味着文件內容實際上是按照ISO-8859-1編碼的。 如果要將其輸出為UTF-8,則將其從ISO-8859-1明確轉換為UTF-8:

$content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');

您始終需要知道要從中進行轉換。 只是告訴PHP“轉換為UTF-8”,然后讓其猜測要轉換的內容會有不確定的結果,在您的情況下,它是行不通的。

檢查文件編碼,是否為沒有BOM的utf-8 例如,使用notepad ++進行檢查文件編碼。

或者也許它很有用:

$content = file_get_contents($sPath);
$content = htmlentities($content);
echo $content;

或者嘗試.htaccess:

AddDefaultCharset utf-8
AddCharset utf-8 *
<IfModule mod_charset.c>
    CharsetSourceEnc utf-8
    CharsetDefault utf-8
</IfModule>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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