【问题标题】:ä stored as ä value is encoded in databaseä 存储为 ä 值在数据库中编码
【发布时间】:2011-06-27 19:28:18
【问题描述】:

我在asp页面上写出一个变量:

name="ända"
response.write name

页面上显示ända,好!

插入数据库时​​,写入数据库的值为ända

页面使用<%Response.charset="iso-8859-1"%>编码

我怎样才能将这个值ända 写入数据库?

<%Response.charset="iso-8859-1"%>

folderName=request.querystring("foretagsnamn")

         folderName = replace(folderName, "å" , "a")
         folderName = replace(folderName, "ä" , "a")
         folderName = replace(folderName, "ö" , "o")
         folderName = replace(folderName, "Å" , "a")
         folderName = replace(folderName, "Ä" , "a")
         folderName = replace(folderName, "Ö" , "o")
         folderName = LCase(folderName)
        response.write folderName

然后只是一个 sql 插入到数据库中。

sql="INSERT INTO users(folderName) VALUES('"&folderName&"');"
    conn.execute(sql)

它是一个mySql数据库,经典的asp。

查询字符串来自信用卡支付服务,奇怪的是,当我执行交易并修改查询字符串时,这是错误的,但如果我只是更新页面以便它再次运行代码和查询字符串,没错!?

【问题讨论】:

  • 您使用的是什么数据库服务器,您用于写入数据库的代码是什么样的?
  • 让我们看看你正在编写的代码
  • 在某些时候,您的角色正在转换为 HTML 实体。就像 Joe Phillips 说的那样,我们需要查看代码来弄清楚在哪里/为什么。
  • 您要将数据放入 CHAR/VARCHAR 还是 NCHAR/NVARCHAR 的列?
  • 我的建议:在您的数据库和网站中删除 iso-8859-1 编码,并在任何地方都使用 UTF8。我的日常工作涉及一个网站,该网站在 1 年前错误地使用了 iso-8859-,而且我们没有一天不为此而自责。

标签: mysql sql unicode asp-classic


【解决方案1】:

URL参数是经过URL编码的,需要对URL参数值进行解码才能得到原始值。

例如,看这个implementation of URLDecode

在 ända 的情况下,这是 HTML 编码的,您可以在同一地址找到 HTML 解码函数。

不知道为什么你会得到一个 HTML 编码的字符串作为 querystring() 的结果。

【讨论】:

  • 我已经问过我从哪里得到查询字符串的那个人,他说他们发送 iso-8859-1,当我查看页面源以及使用 response.write 查看页面时这个变量看起来是对的,但是当它被插入时却出错了?
  • ã¶ 是我现在测试时得到的?
【解决方案2】:

啊——使用绑定参数而不是仅仅将你的 SQL 语句连接在一起。这解决了许多问题(性能、sql 注入攻击等)

编辑:我有一段时间没玩过 MySQL,但想法是这样的:

command = new Command("INSERT INTO USERS(folderName) VALUES (@folderName)");

command.Parameters.Add(new MySqlParameter("@folderName", DbType.NVarChar, 255, folderName));

command.ExecuteNonQuery();

此外,folderName 必须是 unicode 列(NCHAR 或 NVARCHAR)。

【讨论】:

  • 对不起,我不知道绑定参数是什么。
  • 不知道经典的ASP有没有绑定参数
  • 我在数据库中一直使用VARCHAR,有什么区别?
  • VARCHAR 使用一个字节来存储一个字符,而 NVARCHAR (unicode) 使用两个字节来存储一个字符,从而可以存储 ascii 代码为 228 的内容(您遇到问题的字符)。
  • 啊——对不起我对 MySql 的无知。看来您必须设置表格的排序规则:stackoverflow.com/questions/3328968/…
【解决方案3】:

它似乎是通过查询字符串作为错误值传递的。价值从何而来?这似乎是造成问题的地方。

【讨论】:

  • 但是当我在页面上写 folderName 变量时它是正确的。但是插入数据库的时候就出错了。
  • 当您查看页面时,您是查看源代码还是浏览器中的页面?
  • 当我修改查询字符串时,我会在页面上写出变量文件夹名称,以便在浏览器中看到它。
  • @Claes 你需要查看页面源码并在那里查看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 2019-07-22
  • 1970-01-01
  • 2015-03-30
相关资源
最近更新 更多