不幸的是,我正在使用基于MSSQL的数据源,并试图将其集成到正在用PHP编写的自定义Drupal模块中。我的问题是,无论我使用什么样的包装函数,我都不能让撇号正确地出现在页面上。它们都变成了问号。此外,帝国也会做同样的事情。
我知道这是个编码问题。页面是用UTF-8编码的,但是数据库是用SQL_Latin1_General_CP1_CI_AS编码的.我无法控制数据库结构,它不能被修改。我没有选择更改数据库中的所有值。
如何以未损坏的形式访问这些数据,或者至少让PHP正确地将其吐出来?
我尝试过,但没有成功: utf_encode utf_decode html_entities I几个自定义编码的str_replace函数MSSQL没有设置名称函数
帮助!
发布于 2011-04-13 18:59:20
您是否尝试过显式地转换输出?例如:
select col1 COLLATE Latin1_General_100_CI_AS from table1根据MSDN上的排序规则和Unicode支持页面,Unicode5.0是受支持的,尽管您可能需要强制使用较新的*_100排序规则来利用新特性。另一页声称Server不支持UTF-8,但支持UTF-16。
您可以使用内置的TVF仔细阅读支持排序规则的整个列表:
select * from fn_helpcollations()发布于 2011-04-25 16:32:36
当您使用不支持新排序规则的较早版本的Server时,您是否尝试将该数据转换为NVARCHAR?
例如:
SELECT CONVERT(NVARCHAR(MAX), col1) FROM table1管理客户/服务器代码页之间的数据转换上有一个MSDN页面,它提供了一些通用信息。一般来说,建议的重点似乎是修改连接的具体内容或数据库结构(您说,考虑到当前的限制,这是不可能的)。具体来说,
对于特定于代码页的服务器来说,最好的选择是只与使用相同代码页的客户端通信。第二个最佳选择是使用另一个具有几乎相同字符集的代码页。..。如果必须使用不同的代码页与客户端通信,所支持的解决方案是将数据存储在Unicode列中。如果这些选项中的任何一种不可行,则另一种选择是使用二进制、var二进制或var二进制(Max)数据类型将数据存储在二进制列中。然而,二进制数据只能按二进制顺序进行排序和比较。这使得它不像字符数据那么灵活。
https://stackoverflow.com/questions/5653442
复制相似问题