我正在写一个从数据库源中提取的php程序。 某些varchar的引号显示为带有问号的黑色菱形(?,替换字符,我假设来自Microsoft Word文本)。
如何使用php去除这些字符?
不要剥去它们,不要浪费时间。 另请参见stackoverflow.com/questions/38363566/中的"黑钻石"
如果看到该字符(?U + FFFD" REPLACEMENT CHARACTER"),则通常意味着文本本身以某种形式的单字节编码进行编码,但以一种unicode编码(UTF8或UTF16)进行解释。
如果相反,它通常会看起来像这样:?¤。
原始编码可能是ISO-8859-1,也称为Latin-1。您可以在无需更改脚本的情况下进行检查:浏览器为您提供了以不同编码重新解释页面的选项-在Firefox中,使用"查看"->"字符编码"。
为了使浏览器使用正确的编码,请添加一个HTTP标头,如下所示:
header("Content-Type: text/html; charset=ISO-8859-1");
或将编码放入meta标签中:
或者,您可以尝试以另一种编码(最好是UTF-8)从数据库中读取或使用iconv()转换文本。
到目前为止,这是最接近的解决方案。但是,现在我有了一个meta:和Im使用iconv从iso-8859-1转换为utf-8,字符现在显示为带有0096和0092的尊重其他特殊想法(或-)的方框?
是的,我还有一个想法:做一些功课...您可能使用了错误的源编码。 0x92和0x96在Windows-1252中是"弯曲的单引号"和"破折号"。那是正确的吗?您是否尝试过浏览器技巧?
使用PDF2Text类时,PHP标头为我解决了一些问题。
header("Content-Type: textplain; charset=ISO-8859-1");不应该是header("Content-Type: texthtml; charset=ISO-8859-1");吗?
@ j08691:好吧,这取决于现在的内容类型,不是吗?
工作很棒!!!
非常有帮助,如果您有一个PHP脚本可以读取保存为Windows CSV格式的CSV文件,这实际上也可以工作。谢谢!
这是一个字符集问题。这样,它在许多不同的级别上都可能出错,但是很可能数据库中的字符串是utf-8编码的,并且将它们表示为iso-8859-1。或相反。
解决此问题的正确方法是使字符集整齐。由于使用的是PHP,因此最简单的策略是在整个应用程序中使用iso-8859-1。为此,您必须确保:
所有PHP源文件都保存为iso-8859-1(不要与cp-1252混淆)。
您的网络服务器配置为使用charset=iso-8859-1提供文件
或者,您可以使用header从PHP文档中覆盖Web服务器设置。
此外