【发布时间】:2020-07-19 16:23:35
【问题描述】:
我无法将 unicode 字符从表单获取到数据库
网页设计师/seo-guy 想要使用 unicode 字符 ✅(9989,它在绿色框中显示为白色复选标记。
CMS 中的数据是通过表单输入的,两者都是
如果我将 ✅ 直接粘贴到数据库中,使用 Mssql SSMS,字符似乎在字段中,并且 unicode(field) 是 9989。
asp 可以检索 ✅ 并将其作为值放入 html 表单中。
我发布了表单,页面显示表单发送了正确的代码,✅。然后页面发布内容并再次检索,但存储的值不是 ✅ 而是“?”,字符 63。
所以 DB->form 没问题,form->DB 坏了。
我的页面以
开头<% Response.Charset="UTF-8"%>
<% Response.codepage="65001" %>
<form method='post' accept-charset="utf-8">
db 中的字段是 nvarchar,SQL_Latin1_General_CP1_CI_AI 虽然我也尝试过 Danish_Norvegian,但没有区别。
编辑
我将插入包装在一个函数中,但打开它是这样的:
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = connection
cmd.CommandType = 1 ' adCmdText
cmd.CommandText = "update t_kat set meta_title=?,meta_description=? where id=?"
cmd.Parameters.Append cmd.CreateParameter("",adVarChar,1,255, request.form("meta_title"))
cmd.Parameters.Append cmd.CreateParameter("",adVarChar,1,255, request.form("meta_description"))
cmd.Parameters.Append cmd.CreateParameter("",adInteger,1,255, request.form("id")
cmd.Execute
编辑 2
如果我说server.htmlencode(request.form("meta_description")) 它会起作用,但是 ✅æøåÆØÅ 会以&#9989;&#230;&#248;&#229;&#198;&#216;&#197; 的形式存储在数据库中,我宁愿避免这种情况。
在最坏的情况下,id 接受“怪异”字符为&#9989,但我更喜欢其他字符。但我认为没有选择替换哪些字符的选项。
我可以在存储之前在 CMS 前端将每个“奇怪”字符替换为 %#nnnnformat(我认为他不会使用那么多),但我也不想去那里。
【问题讨论】:
-
向我们展示如何插入数据。字符可以存储,并且可以很好地检索:DB<>Fiddle
-
通过使用错误的字段类型 adVarChar 而不是 adVarWchar 可以重现此问题
-
是的,但是当我发表评论时,距离您向我们展示如何您插入数据已经过了 20 分钟,我问您是如何插入数据的原因。为什么其他人在您编辑后投票认为它没有复制品,我无法评论,但我的却是之前。然而,我已经投票决定重新开放这个。不过,现在这很可能是另一个问题的重复,其中有人使用了错误的数据类型。就像“为什么
SELECT '✅'返回??”有100 个重复项?
标签: sql-server unicode vbscript asp-classic