PHP 输出显示带有问号的小黑钻石
我正在编写一个从数据库源中提取的php程序。一些 varchars 的引号显示为黑色菱形,其中带有问号(,替换字符,我假设来自 Microsoft Word 文本)。
如何使用php去除这些字符?
我正在编写一个从数据库源中提取的php程序。一些 varchars 的引号显示为黑色菱形,其中带有问号(,替换字符,我假设来自 Microsoft Word 文本)。
如何使用php去除这些字符?
如果您看到该字符( U + FFFD “替换字符”),通常意味着文本本身以某种形式的单字节编码编码,但以其中一种 unicode 编码(UTF8 或 UTF16)解释。
如果反过来,它(通常)看起来像这样:ä。
可能原始编码是ISO-8859-1,也称为Latin-1。您无需更改脚本即可进行检查:浏览器为您提供了以其他编码重新解释页面的选项 - 在Firefox中使用“查看” - >“字符编码”。
要使浏览器使用正确的编码,请添加如下 HTTP 标头:
header("Content-Type: text/html; charset=ISO-8859-1");
或者将编码放在元标记中:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
或者,您可以尝试以其他编码(最好是 UTF-8)从数据库中读取,或者使用 iconv()
转换文本。
我也遇到了这个问题。与此同时,我遇到了三个发生这种情况的案例:
substr()
我在一个切割UTF8字符的UTF8字符串上使用,因此剪切的字符无法正确显示。请改用。学分substr()
mb_substr($utfstring, 0, 10, 'utf-8');
htmlspecialchars()
另一个问题是在 UTF8 字符串上使用。修复方法是使用:htmlspecialchars()
htmlspecialchars($utfstring, ENT_QUOTES, 'UTF-8');
preg_replace()
最后,我发现这可能会导致UTF出现问题。例如,代码将 UTF 字符串“F(×)=2×-3”转换为“F 2”。解决方法是改用 mb_ereg_replace()。
preg_replace()
$string = preg_replace('/[^A-Za-z0-9ÄäÜüÖöß]/', ' ', $string);
我希望这些额外的信息将有助于摆脱这些问题。