2013-03-21 40 views
0

傍晚,替換無效的UTF-8,不能替換

我有我正在清理的HTML文件。這些都出現在像我的文本編輯器中一些無效的Unicode字符:

/B7

我想要麼他們應該是性格,還是我選擇的替換字符替換這些。例如,/ B7字符是一個middot,但我想用一站式替換它。

的位置功能:PHP - Fast way to strip all characters not displayable in browser from utf8 string

刪除無效字符,但我不激動了足夠的編碼做任何更多的它。

+1

「/ B7」是什麼意思?這是三個字符。你的文本編輯器(哪個?)以這種方式呈現?你怎麼知道它應該是什麼?如果「/ B7」表示「middot」,可能是U + 00B7「·」,那麼它是無效的,這與UTF-8有什麼關係? – 2013-03-21 05:45:09

+0

我在Ubuntu上使用文本編輯器gEdit。我知道它應該是什麼,因爲/ B7是一個middot,但由於某種原因(我不知道爲什麼),而不是渲染作爲中間點,在gEdit它只是顯示爲'/ B7'以紅色突出顯示;當我嘗試在gEdit中保存文檔時,它告訴我有無效字符。 我不知道什麼是無效的,因爲我沒有足夠的字符編碼。 – 2013-03-21 12:33:33

回答

3

你的文件在Windows 1252編碼很可能(其中0xB7解碼以·)和Gedit是對其進行解碼以UTF-8和示出了無效UTF-8字節(0xB7無效以UTF-8時以外的特定序列)直接作爲他們的價值我猜。您可以修復該文件在很多方面,但在PHP中你可以:

<?php 
$file_contents = file_get_contents("brokenfile.txt"); 
$file_contents = mb_convert_encoding($file_contents, "UTF-8", "Windows-1252"); 
file_put_contents("brokenfile.txt", $file_contents); 

以上腳本將解碼的文件與Windows 1252和它編碼爲UTF-8。

文本編輯器允許您指定通常在「另存爲」對話框或某些配置中保存文件的編碼。在使用它之前,您應該始終配置您的編輯器編碼。

如果您在轉換後在您的網站上看到·,這意味着您要告訴瀏覽器您的資料在Windows-1252或ISO-8859-1等等。您必須告訴瀏覽器您的資料使用UTF- 8:

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

謝謝。原始文件表示它是ISO的,我是MB轉換的;但正如你告訴我的那樣,它是Windows-1252,現在一切正常。 謝謝你的時間和專業知識。 – 2013-03-21 18:41:25