Mysql
 sql >> база данни >  >> RDS >> Mysql

Класическо ASP, MySQL или ODBC UTF8 кодиране

Имате шанс за словенски букви според това картографиране и откъс от Wiki статия за Windows-1252 :

Ето какво трябва да направите:

  1. Използвайте UTF-8 (без BOM) кодирани файлове срещу възможността да съдържат твърдо кодиран текст. (✔ вече е готово)

  2. Посочете UTF-8 за набор от знаци за отговор с ASP от страна на сървъра или с мета тагове от страна на клиента. (✔ вече е готово)

  3. Кажете на MySQL сървъра, че вашите команди са в набор от знаци utf-8 и очаквате кодирани в utf-8 набори от резултати. Добавете начален израз към низа за свързване:...;stmt=SET NAMES 'utf8';...

  4. Задайте Response.CodePage на 1252.

Тествах следния скрипт и той работи като чар.

DDL: http://sqlfiddle.com/#!8/c2c35/1

ASP:

<%@Language=VBScript%>
<% 
Option Explicit

Response.CodePage = 1252
Response.LCID = 1060
Response.Charset = "utf-8"

Const adCmdText = 1, adVarChar = 200, adParamInput = 1, adLockOptimistic = 3

Dim Connection
Set Connection = Server.CreateObject("Adodb.Connection")
    Connection.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=myDb;User=myUsr;Password=myPwd;stmt=SET NAMES 'utf8';"
    
If Request.Form("name").Count = 1 And Len(Request.Form("name")) Then 'add new
    Dim rsAdd
    Set rsAdd = Server.CreateObject("Adodb.Recordset")
        rsAdd.Open "names", Connection, ,adLockOptimistic
        rsAdd.AddNew
        rsAdd("name").Value = Left(Request.Form("name"), 255)
        rsAdd.Update
        rsAdd.Close
    Set rsAdd = Nothing
End If

Dim Command
Set Command = Server.CreateObject("Adodb.Command")
    Command.CommandType = adCmdText
    Command.CommandText = "Select name From `names` Order By id Desc"
    
    If Request.QueryString("name").Count = 1 And Len(Request.QueryString("name")) Then
        Command.CommandText = "Select name From `names` Where name = ? Order By id Desc"
        Command.Parameters.Append Command.CreateParameter(, adVarChar, adParamInput, 255, Left(Request.QueryString("name"), 255))
    End If
    
    Set Command.ActiveConnection = Connection
    With Command.Execute
        While Not .Eof
            Response.Write "<a href=""?name=" & .Fields("name").Value & """>" & .Fields("name").Value & "</a><br />"
            .MoveNext
        Wend
        .Close
    End With
    
    Set Command.ActiveConnection = Nothing
    Set Command = Nothing
    
Connection.Close
%><hr />
<a href="?">SHOW ALL</a><hr />
<form method="post" action="<%=Request.ServerVariables("SCRIPT_NAME")%>">
Name : <input type="text" name="name" maxlength="255" /> <input type="submit" value="Add" />
</form>

Като последна забележка:

Когато трябва да приложите html кодиране към низове, извлечени от базата данни, не трябва повече да използвате Server.HTMLEncode поради това, че Response.Codepage е 1252 от страната на сървъра и тъй като Server.HTMLEncode е зависима от контекста кодова страница, това ще доведе до безсмислени резултати.
Така че ще трябва да напишете свой собствен HTML енкодер, за да се справите със случая.

Function MyOwnHTMLEncode(ByVal str)
    str = Replace(str, "&", "&amp;")
    str = Replace(str, "<", "&lt;")
    str = Replace(str, ">", "&gt;")
    str = Replace(str, """", "&quot;")
    MyOwnHTMLEncode = str
End Function
'Response.Write MyOwnHTMLEncode(rs("myfield").value)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо този :id в Rails не работи с Postgresql, но работи с MySQL?

  2. Стойност на постоянна колона в MySQL таблица

  3. Синтактична грешка:WITH не е валиден вход в тази позиция

  4. Грешка в PHP / MySQL при запитване на имейл адрес

  5. mysql отнема твърде много време за вмъкване на редове