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

Php HTML中的(?)标记。来自数据库内容的编码问题?,php,sql,sql-server,sql-server-2005,Php,Sql,Sql Server,Sql Server 2005,知道为什么会这样吗 这看起来主要是用撇号和连字符。我能解决这个问题吗?我从数据库中提取数据并将其打印到页面上,如下所示: <div class="block"> <?=$details['agenda'] ?> </div> 正如其他评论者可能提到的,这是一个字符编码问题。如果幸运的话,您可以强制您的HTML页面以UTF-8呈现,这将解决这个问题 不幸的是,如果运气不好,您会发现字符以错误的编码存储在数据库中。或者数据库会转换它

知道为什么会这样吗

这看起来主要是用撇号和连字符。我能解决这个问题吗?我从数据库中提取数据并将其打印到页面上,如下所示:

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

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

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

我所知道的解决此类问题的最佳方法是强制您的每一步都遵循UTF-8内容编码。例如,您可能会经历以下步骤:

$smartquotes = array("”", "“");
str_replace($smartquotes, '"', $mytext);
  • 内容作者使用Microsoft Word编写包含“SmartQuotes”的文档
  • 内容作者复制并粘贴到内容管理系统的编辑框中
  • 内容管理系统保存到数据库中
  • 数据库内部可能存储Unicode数据,也可能不存储Unicode数据-请确保使用
    nvarchar
    (或数据库支持的任何Unicode类型)
  • 从数据库读取可能需要扫描字符
  • 然而,解决这个问题非常棘手!很久以前,我习惯于编写“检测和修复”例程,如下所示:

    $smartquotes = array("”", "“");
    str_replace($smartquotes, '"', $mytext);
    
    当然你知道问题是什么-我会不断发现我必须修复的新角色。MicrosoftWord喜欢使用大量不寻常的字符——版权、注册标志、撇号、连字符等等。我会不断地增加这个函数,一次又一次,直到我发疯。所以现在,我只是通过我的整个内容交付路径,强迫一切遵守UTF-8规则;在大多数情况下,这似乎可以解决问题


    祝你好运

    您在表格中使用的字符集是什么?也可以尝试向元标记中添加(假设您使用utf-8),它们是非ascii字符,需要为HTML转义。您可以找到这些的表格和图表,要修复它,您可以执行查找替换或指定另一个字符表,如utf-8。