地区表 我有一行
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
您好,您需要考虑正确的 HTML 内容类型标头
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
数据可能被正确选择,但浏览器可能无法按您的预期显示它们。 你可以在 Firefox 中通过菜单视图 -> 字符编码 -> 来玩这个,直到找到正确的一个
为了使特殊字符起作用,一般规则是所有组件必须采用相同的编码。这意味着数据库、数据库连接(连接到数据库后经常忘记“SET NAMES {charset}”调用)和网页内容类型必须全部采用相同的字符集。
如果您从 latin1 数据库查询数据并且数据库连接也有 latin1,请确保您显示值的页面也是 latin1。
建议在所有地方都使用 UTF-8 而不是 latin1,所以如果可能的话,我建议将数据库中的字符集和数据全部更改为 UTF-8,因为它更全面兼容且更易于处理。
只需删除 UTF8 字符集并让浏览器选择将设置为 ISO-8859-1 的字符集,该字符集将在 sql server 中使用重音符号
(我知道这个问题很老了,我只是想在这里留下可能有用的信息......)
我总是从具有相同排序规则的 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() 返回编码列表。
我希望它对某人有帮助。