【问题标题】:Storing unicode like ✅ from form to db将像✅这样的unicode从表单存储到数据库
【发布时间】: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")) 它会起作用,但是 ✅æøåÆØÅ 会以&amp;#9989;&amp;#230;&amp;#248;&amp;#229;&amp;#198;&amp;#216;&amp;#197; 的形式存储在数据库中,我宁愿避免这种情况。 在最坏的情况下,id 接受“怪异”字符为&amp;#9989,但我更喜欢其他字符。但我认为没有选择替换哪些字符的选项。

我可以在存储之前在 CMS 前端将每个“奇怪”字符替换为 %#nnnnformat(我认为他不会使用那么多),但我也不想去那里。

【问题讨论】:

  • 向我们展示如何插入数据。字符可以存储,并且可以很好地检索:DB<>Fiddle
  • 通过使用错误的字段类型 adVarChar 而不是 adVarWchar 可以重现此问题
  • 是的,但是当我发表评论时,距离您向我们展示如何您插入数据已经过了 20 分钟,我问您是如何插入数据的原因。为什么其他人在您编辑后投票认为它没有复制品,我无法评论,但我的却是之前。然而,我已经投票决定重新开放这个。不过,现在这很可能是另一个问题的重复,其中有人使用了错误的数据类型。就像“为什么SELECT '✅' 返回??”有100 个重复项?

标签: sql-server unicode vbscript asp-classic


【解决方案1】:

已解决! 参数应该是正确的类型:

cmd.Parameters.Append cmd.CreateParameter("",adVarWChar,1,255, request.form("meta_title")

adVarWChar 而不是adVarChar

我认为在输入文本表单中使用数据时,只需要替换引号

&lt;input type='text' name="meta_title" value="&lt;%=replace("""","&amp;quot;",res("meta_title"))%&gt;"&gt;

这是为了防止无效的 HTML 像 &lt;input type="text" value="The 11'8" bridge"&gt;

把它变成&lt;input type="text" value="The 11'8&amp;quot; bridge"&gt;

如果用作文本,&lt; 需要转义;

&lt;B&gt;one&lt;two&lt;/B&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 2012-12-23
    • 2010-12-27
    相关资源
    最近更新 更多