重音字符在浏览器中无法正确显示

问题描述 投票:0回答:4

地区表 我有一行

district_id   district_name   country_id
15            Šahty           16       

从php中选择并在浏览器中显示时,显示如下:�ahty

我使用带有排序规则 SQL_Latin1_General_CP1_CI_AS 的 mssql 2005。

问题是这样的 删除重音和特殊字符 但我需要 php 中的解决方案。

更新(?): sqlserver 中不支持 UTF-8。 https://dba.stackexchange.com/questions/7346/mssql-2005-2008-utf-8-collation-charset

php sql-server
4个回答
1
投票

您好,您需要考虑正确的 HTML 内容类型标头

  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

数据可能被正确选择,但浏览器可能无法按您的预期显示它们。 你可以在 Firefox 中通过菜单视图 -> 字符编码 -> 来玩这个,直到找到正确的一个


0
投票

为了使特殊字符起作用,一般规则是所有组件必须采用相同的编码。这意味着数据库、数据库连接(连接到数据库后经常忘记“SET NAMES {charset}”调用)和网页内容类型必须全部采用相同的字符集。

如果您从 latin1 数据库查询数据并且数据库连接也有 latin1,请确保您显示值的页面也是 latin1。

建议在所有地方都使用 UTF-8 而不是 latin1,所以如果可能的话,我建议将数据库中的字符集和数据全部更改为 UTF-8,因为它更全面兼容且更易于处理。


0
投票

只需删除 UTF8 字符集并让浏览器选择将设置为 ISO-8859-1 的字符集,该字符集将在 sql server 中使用重音符号


0
投票

(我知道这个问题很老了,我只是想在这里留下可能有用的信息......)

我总是从具有相同排序规则的 mssql 服务器获取数据,并且每次我都必须转换编码以构建 json 以返回到我的页面。 这对我有用:

$idTemp = iconv(mb_detect_encoding(trim($row['idTemp']), mb_detect_order(), true), "UTF-8", trim($row['idTemp']))

此处 iconv() 将一种编码转换为另一种编码,mb_detect_encoding() 识别最有可能是字符串的编码,mb_detect_order() 返回编码列表。

我希望它对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.