Хранение Unicode, как ✅ от формы до дБ - PullRequest
0 голосов
/ 07 апреля 2020

Я не могу получить символы юникода из формы в db

Веб-дизайнер / seo-guy хочет использовать символ юникода ✅ (9989, который отображается в виде галочки белого цвета в зеленом поле.

Данные в CMS вводятся через форму, как

. Если я вставляю ✅ непосредственно в базу данных, используя Ms sql SSMS, символ отображается в поле, а юникод (поле) - 9989.

asp может получить ✅ и поместить его в качестве значения в форму html.

Я отправляю форму, страница показывает, что форма отправляет правильный код, the. Страница затем отправьте содержимое и извлеките его снова, но сохраненное значение не ✅, а "?", символ 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, без разницы.

edit

У меня вставка вставлена ​​в функцию, но развернута это так:

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
* 102 5 * РЕДАКТИРОВАТЬ 2 Это работает, если я скажу server.htmlencode(request.form("meta_description")), но тогда ✅æøåÆØÅ сохраняется в БД как &#9989;&#230;&#248;&#229;&#198;&#216;&#197;, чего я бы предпочел избежать. В худшем случае id принимает «странные» символы как &#9989, но я предпочитаю другие символы как есть. Но я не думаю, что есть возможность выбрать, какие символы заменять.

Я мог бы сделать замену каждого "странного" символа на формат %#nnnn (я не думаю, что он использует так много) в интерфейсе CMS перед сохранением, но я бы тоже не стал go.

1 Ответ

1 голос
/ 07 апреля 2020

решено! Параметр должен быть правильного типа:

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

adVarWChar вместо adVarChar

Я думаю только кавычки нуждаются в замене при использовании данных в текстовой форме ввода

<input type='text' name="meta_title" value="<%=replace("""","&quot;",res("meta_title"))%>">

Это предотвращает недействительные HTML как <input type="text" value="The 11'8" bridge">

Превращение в <input type="text" value="The 11'8&quot; bridge">

При использовании в качестве текста < необходимо экранировать;

<B>one<two</B>

...