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

标签 php sql-server sql-server-2012 freetds php-5.5

我很惊讶我无法通过搜索找到这个问题的直接答案。

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

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

我的列类型是 NVARCHAR。

这是我尝试过的:

  1. 我试过不进行任何转换,只是像往常一样插入值,但该值存储为 thisâ??that .

  2. 我尝试使用 iconv('UTF-8', 'UCS-2', $value) 在 PHP 中将值转换为 UCS-2 , 但我收到一条错误消息 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 服务器。不可能改变这一点。

最佳答案

您可以尝试对输入进行 base64 编码,这对于 PHP 的 base64_encode() 处理来说相当简单和 base64_decode()它应该处理您的用户扔给它的任何东西。

(编辑:您显然也可以执行 base64 encoding on the SQL Server side 。恕我直言,这似乎不是它应该负责的事情,但它是一个选项。)

关于php - 如何在 MSSQL 中存储和检索扩展的 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41945520/

相关文章:

javascript - 将表单数据 POST 中的数组发送到 PHP 端点

sql-server - 跨多个表维护标识值

c# - 在 sql asp.net 中获取过去 30 天未登录的用户

sql-server - 缩小非常大的表上的数据类型

php - 如何在数据库的同一列中保存多个行输入?

php - MongoDB:跨集合查询

sql-server - 在存储过程中创建唯一 ID 以匹配旧数据

sql - 如何在 SQL Server 中使用 FOR XML PATH 删除前导空格

database - SQL Server 代理作业执行历史日志是否保存到磁盘?

php/mysql 帮助不需要输出错误