我很惊讶我无法通过搜索找到这个问题的直接答案。
我有一个使用 PHP 编写的 Web 应用程序,它接受用户输入。由于应用程序的性质,用户可能经常使用扩展的 ASCII 字符(也称为“ALT 代码”)。
我目前的具体问题是 ALT 代码 26,它是一个右箭头 (→)。这将与其他文本一起存储在同一字段中(例如,'this→that'
)。
我的列类型是 NVARCHAR。
这是我尝试过的:
我试过不进行任何转换,只是像往常一样插入值,但该值存储为
thisâ??that
.我尝试使用
iconv('UTF-8', 'UCS-2', $value)
在 PHP 中将值转换为 UCS-2 , 但我收到一条错误消息Unclosed quotation mark after the character string 't'.
.查询最终看起来像这样:UPDATE myTable SET myColumn = 'this�!that'
.我试过进行上述转换,然后在引用值前添加一个 N,但我得到了相同的错误消息。查询如下所示:
UPDATE myTable SET myColumn = N'this�!that'
.我已尝试删除 UCS-2 转换并仅在引用值前添加 N,查询再次运行,但该值存储为
thisâ that
.我试过使用
utf8_decode($value)
在 PHP 中,但箭头只是替换为问号。
那么谁能回答这个(看似简单的)问题,我怎样才能将这个值存储在我的数据库中,然后按照最初输入的方式检索它?
我使用的是 PHP 5.5 和 MSSQL 2012。如果驱动程序/操作系统版本有任何问题,那就是通过 FreeTDS 连接的 Linux 服务器。不可能改变这一点。
最佳答案
您可以尝试对输入进行 base64 编码,这对于 PHP 的 base64_encode()
处理来说相当简单和 base64_decode()
它应该处理您的用户扔给它的任何东西。
(编辑:您显然也可以执行 base64 encoding on the SQL Server side 。恕我直言,这似乎不是它应该负责的事情,但它是一个选项。)
关于php - 如何在 MSSQL 中存储和检索扩展的 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41945520/