Tra*_*ty3 7 php sql-server freetds sql-server-2012 php-5.5
我很惊讶我无法通过搜索找到这个问题的直截了当的答案.
我有一个PHP的Web应用程序,它接受用户输入.由于应用程序的性质,用户可能经常使用扩展的ASCII字符(也称为"ALT代码").
我目前的具体问题是使用ALT代码26,这是一个右箭头(→).这将伴随其他文本存储在同一字段中(例如,'this?that'
).
我的列类型是NVARCHAR.
这是我尝试过的:
我尝试过不进行转换,只是正常插入值,但值存储为thisâ??that
.
我尝试使用PHP将值转换为UCS-2 iconv('UTF-8', 'UCS-2', $value)
,但是我收到了一个错误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()
并且它应该处理用户抛出的内容.
(编辑:您显然也可以在SQL Server端执行base64编码.这似乎不应该对imho负责,但它是一个选项.)
归档时间: |
|
查看次数: |
1108 次 |
最近记录: |