如何在MSSQL中存储和检索扩展的ASCII字符

Tra*_*ty3 7 php sql-server freetds sql-server-2012 php-5.5

我很惊讶我无法通过搜索找到这个问题的直截了当的答案.

我有一个PHP的Web应用程序,它接受用户输入.由于应用程序的性质,用户可能经常使用扩展的ASCII字符(也称为"ALT代码").

我目前的具体问题是使用ALT代码26,这是一个右箭头(→).这将伴随其他文本存储在同一字段中(例如,'this?that').

我的列类型是NVARCHAR.

这是我尝试过的:

  1. 我尝试过不进行转换,只是正常插入值,但值存储为thisâ??that.

  2. 我尝试使用PHP将值转换为UCS-2 iconv('UTF-8', 'UCS-2', $value),但是我收到了一个错误Unclosed quotation mark after the character string 't'..查询最终看起来像这样:UPDATE myTable SET myColumn = 'this?!that'.

  3. 我已尝试进行上述转换,然后在引用值之前添加N,但我收到相同的错误消息.查询如下所示:UPDATE myTable SET myColumn = N'this?!that'.

  4. 我已经尝试删除UCS-2转换,只是在引用值之前添加N,并且查询再次起作用,但值存储为thisâ that.

  5. 我尝试utf8_decode($value)在PHP中使用,但随后箭头被替换为问号.

所以任何人都可以回答(看似简单的)问题,如何将这个值存储在我的数据库中,然后按照最初输入的方式检索它?

我正在使用PHP 5.5和MSSQL 2012.如果驱动程序/操作系统版本的任何问题发挥作用,它是通过FreeTDS连接的Linux服务器.没有可能改变这一点.

Joh*_*nes 5

您可以尝试对输入进行base64编码,这对于处理PHP来说是相当简单的base64_encode(),base64_decode()并且它应该处理用户抛出的内容.

(编辑:您显然也可以在SQL Server端执行base64编码.这似乎不应该对imho负责,但它是一个选项.)