将 unicode 像 ✅ 从表单存储到数据库
Storing unicode like ✅ from form to db
我无法将 unicode 字符从表单获取到数据库
webdesigner/seo-guy 想要使用 unicode 字符 ✅(9989,在绿色框中显示为白色复选标记。
CMS中的数据是通过表单录入的,既
如果我直接将✅粘贴到数据库中,使用Mssql SSMS,字符出现在字段中,unicode(field) 是9989。
asp 可以检索 ✅ 并将其作为值放入 html 形式。
我post表格,页面显示表格发送正确代码,✅。页面然后 post 内容并再次检索它,但存储的值不是 ✅ 而是 "?", char 63.
所以DB->form没问题,form->DB坏了。
我的页面以
开头
<% Response.Charset="UTF-8"%>
<% Response.codepage="65001" %>
<form method='post' accept-charset="utf-8">
数据库中的字段是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"))
它会起作用,但随后 ✅æøåÆØÅ 会作为 ✅æøåÆØÅ
存储在数据库中,我宁愿避免这种情况。
在最坏的情况下,id 接受 "wierd" 字符作为 ✅
但我更喜欢其他字符。但我认为没有 select 替换哪些字符的选项。
我可以在存储之前在 CMS 前端将每个 "weird" 字符替换为 %#nnnn
格式(我不认为他使用那么多),但我宁愿不去也有。
已解决!
参数应该是正确的类型:
cmd.Parameters.Append cmd.CreateParameter("",adVarWChar,1,255, request.form("meta_title")
adVarWChar
而不是 adVarChar
我认为在输入文本形式中使用数据时只需要替换引号
<input type='text' name="meta_title" value="<%=replace("""",""",res("meta_title"))%>">
这是为了防止无效的HTML like
<input type="text" value="The 11'8" bridge">
变成<input type="text" value="The 11'8" bridge">
如果用作文本,<
需要转义;
<B>one<two</B>
我无法将 unicode 字符从表单获取到数据库
webdesigner/seo-guy 想要使用 unicode 字符 ✅(9989,在绿色框中显示为白色复选标记。
CMS中的数据是通过表单录入的,既
如果我直接将✅粘贴到数据库中,使用Mssql SSMS,字符出现在字段中,unicode(field) 是9989。
asp 可以检索 ✅ 并将其作为值放入 html 形式。
我post表格,页面显示表格发送正确代码,✅。页面然后 post 内容并再次检索它,但存储的值不是 ✅ 而是 "?", char 63.
所以DB->form没问题,form->DB坏了。
我的页面以
开头<% Response.Charset="UTF-8"%>
<% Response.codepage="65001" %>
<form method='post' accept-charset="utf-8">
数据库中的字段是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"))
它会起作用,但随后 ✅æøåÆØÅ 会作为 ✅æøåÆØÅ
存储在数据库中,我宁愿避免这种情况。
在最坏的情况下,id 接受 "wierd" 字符作为 ✅
但我更喜欢其他字符。但我认为没有 select 替换哪些字符的选项。
我可以在存储之前在 CMS 前端将每个 "weird" 字符替换为 %#nnnn
格式(我不认为他使用那么多),但我宁愿不去也有。
已解决! 参数应该是正确的类型:
cmd.Parameters.Append cmd.CreateParameter("",adVarWChar,1,255, request.form("meta_title")
adVarWChar
而不是 adVarChar
我认为在输入文本形式中使用数据时只需要替换引号
<input type='text' name="meta_title" value="<%=replace("""",""",res("meta_title"))%>">
这是为了防止无效的HTML like
<input type="text" value="The 11'8" bridge">
变成<input type="text" value="The 11'8" bridge">
如果用作文本,<
需要转义;
<B>one<two</B>