2013-03-21 69 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