MySQL中HTML的特殊字符输出

3
我正在使用WordPress中的一个插件,该插件将一些HTML代码存储在字段中。此列为mediumtext utf8_general_ci
当我想要输出此信息时,所有特殊字符,如" ´ ' ... 和其他一些字符会显示为带有问号的黑色菱形符号
当插件显示此文本时,它是完美的。以下是头部内容:
<meta charset="UTF-8" />

当我在其他地方输出时,我的脑海里会有这个问题,所有这些字符都会丢失:

<meta http-equiv="content-type" content="text/html; charset=utf-8"/>

字符在MYSQL中得到正确存储,我通过PHP这样输出它:
ob_start();?>
some html
<?php echo $row4['details'];?> <- this is the field im talking about
some html
<?php
$details = ob_get_clean();

然后只需:

echo $details;

我已经阅读了很多相关内容,字符集总是被提到,但我认为我的字符集没问题。

感谢您的帮助!

编辑:添加完整示例

在 WordPress 中显示的文本。正如我在评论中所说,这可能是由编辑从 Microsoft Word 复制/粘贴到 Worpress 中的。

8. Choose the verb to complete the sentence.

______ you ever _____ the proverb, “Time is gold”?
 Has… heard…
 Have… hear…
 Have… heard…

在数据库中,存储的格式如下(请勿查看正确/用户答案,因为它们已经正常工作):

<span class='watupro_num'>8. </span>Choose the verb to complete the sentence.</p>
    <p>______ you ever _____ the proverb, “Time is gold”?</p></div>
    <ul>
    <li class='answer'><span class='answer'>Has… heard…</span></li>
    <li class='answer user-answer'><span class='answer'>Have… hear…</span></li>
    <li class='answer correct-answer'><span class='answer'>Have… heard…</span></li>
    </ul>

从数据库中显示的文本(我的工作内容)

8. Choose the verb to complete the sentence.

______ you ever _____ the proverb, �Time is gold�?

    Has� heard�
    Have� hear�
    Have� heard�

由于Kirit Patel的贡献,在utf8_encode()之后显示的文本

8. Choose the verb to complete the sentence.

______ you ever _____ the proverb, Time is gold?

    Has heard
    Have hear
    Have heard

我刚刚发现字符仍然存在。在编辑时,我可以看到一个带有数字的框(在预览中不显示)。

就像这样: character


1
“特殊字符”是指像老式的重音符号(U+00B4 ACUTE ACCENT)这样的东西吗?我认为你的应用程序根本没有使用UTF-8,而在HTML标签中声明也无法改变这个事实。 - Álvaro González
听起来你需要设置 PHP 的头文件和连接为 utf8。 - Qirel
撇号、破折号、省略号、引号等字符可能会出现问题。我该如何设置PHP头和连接?我不知道你的意思。 - will
1
U+00B4在UTF-8中占用两个字节。如果您的应用程序正在使用UTF-8并且出现了问题,您将看到单个字节(在这种情况下为´)。我怀疑您的应用程序使用Windows-1252或ISO-8859-1,因此MySQL将把UTF-8数据库值转换为这样的单字节编码。如果您将其声明为UTF-8(实际上不是),则会看到 - Álvaro González
1
我目前的猜测是你还没有配置WordPress使用UTF-8。对于那个软件我一无所知,所以无法告诉你如何修复它,但我会添加一个适当的标签,希望能引起某人的注意。 - Álvaro González
我认为@ÁlvaroGonzález你可能指向了正确的方向。这段代码是由一些用户(WP编辑器)生成的,他们可能已经将文本从Word复制粘贴到WP插件中,然后再存储到数据库中。有没有人知道一个简单的方法来告诉编辑器如何粘贴这个文本?也许可以先将其粘贴到记事本中,然后再粘贴到WordPress中? - will
2个回答

4
您可以像这样使用:
<?php 

echo utf8_encode($row4['details']);
?>

希望这能帮助您。

它看起来比钻石消失后好多了。但是有些字符没有显示出来。我想这对于最终用户来说已经足够好了,即使有一些字符没有显示出来。我认为我会保持现状,但解决方案并不完整。谢谢。 - will
你能否提供完整的文本呢? - Kirit Patel
如果这个解决方法解决了问题,那么我的最初猜测是正确的,即$row4 ['details']以Windows-1252、ISO-8859-1或类似编码进行编码(在没有进一步细节的情况下很难确定哪一个)。 - Álvaro González
只返回翻译内容:编辑过的原始问题 - will

0

关于“黑色菱形”问题,可以在这里讨论。"Something like this" 显示了 0093,它是某些引号风格的无效utf8代码;另一方面,十六进制数93,解释为latin1

你能否简单地切换到ASCII引号和撇号?

否则,您需要始终使用utf8--从生成十六进制数93的任何地方开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接