HTML中的(?)标记。来自数据库内容的编码问题?

时间:2012-08-17 18:44:34

标签: php sql sql-server sql-server-2005

知道为什么会这样吗?

enter image description here

它看起来主要发生在撇号和连字符上。任何想法,如果我能解决这个问题?我从数据库中提取数据并将其打印到以下页面:

<div class="block">
              <?=$details['agenda'] ?>
</div>

1 个答案:

答案 0 :(得分:2)

正如其他评论者所提到的,这是一个字符编码问题。如果你很幸运,你可以强制你的HTML页面以UTF-8呈现并解决它。

不幸的是,如果你不幸运,你会发现字符以错误的编码存储在数据库中。或者数据库可能会转换它们。或者也许字符编码数据沿着路径被破坏了!没有办法事先知道那些角色被破坏了。

我知道修复此类问题的最佳方法是强制沿着您的路径执行每一步,以遵循UTF-8内容编码。例如,您可能会执行以下步骤:

  1. 内容作者在包含“SmartQuotes”
  2. 的Microsoft Word中编写文档
  3. 内容作者将副本粘贴到内容管理系统的编辑框中。
  4. 内容管理系统保存到数据库。
  5. 数据库可能会也可能不会在内部以Unicode格式存储数据 - 请确保使用nvarchar(或数据库支持的任何unicode类型)。
  6. 从数据库中读取可能需要扫描字符。
  7. 然而,解决这个问题非常棘手!很久以前,我曾习惯写这样的“检测和修复”程序:

    $smartquotes = array("”", "“");
    str_replace($smartquotes, '"', $mytext);
    

    当然你知道问题是什么 - 我会不断发现我必须解决的新角色。 Microsoft Word喜欢做大量不寻常的字符 - 版权,注册标记,撇号,连字符等。我会一遍又一遍地添加这个功能,直到我发疯。所以现在我只是通过我的整个内容传递路径并强制一切遵守UTF-8规则;在大多数情况下,这似乎可以解决它。

    祝你好运!