ä存储为ä值在数据库中编码

时间:2011-02-15 18:03:04

标签: mysql sql unicode asp-classic

我在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。

查询字符串来自信用卡支付服务,奇怪的是,当我执行事务并且我重新使用查询字符串时,它是错误的,但是如果我然后只是更新页面以便它再次运行代码和查询字符串,这是对的!?

3 个答案:

答案 0 :(得分:2)

网址参数是网址编码的,您需要解码网址参数值才能获得原始值。

例如,请参阅此implementation of URLDecode

对于&amp;#228; nda,这是HTML编码的,您可以在同一地址找到HTML解码功能。

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

答案 1 :(得分:1)

啊 - 使用绑定参数而不是仅仅将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)。

答案 2 :(得分:0)

它似乎是通过querystring传递为错误的值。价值来自哪里?这似乎是问题产生的地方。