Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Klasyczne kodowanie ASP, MySQL lub ODBC UTF8

Masz szansę na słoweńskie litery zgodnie z tym mapowaniem oraz fragment artykuł wiki o Windows-1252 :

Oto rzeczy do zrobienia:

  1. Używaj plików zakodowanych w formacie UTF-8 (bez BOM) przeciwko możliwości zawierania tekstu zakodowanego na stałe. (✔ już zrobione)

  2. Określ UTF-8 dla zestawu znaków odpowiedzi z ASP po stronie serwera lub metatagami po stronie klienta. (✔ już zrobione)

  3. Powiedz serwerowi MySQL, że twoje polecenia są w zestawie znaków utf-8, a oczekujesz zestawów wyników zakodowanych w utf-8. Dodaj początkową instrukcję do ciągu połączenia:...;stmt=SET NAMES 'utf8';...

  4. Ustaw Response.CodePage na 1252.

Przetestowałem następujący skrypt i działa jak czar.

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>

Na koniec uwaga:

Kiedy musisz zastosować kodowanie HTML do ciągów pobranych z bazy danych, nie powinieneś już używać Server.HTMLEncode, ponieważ Response.Codepage jest 1252 po stronie serwera, a ponieważ Server.HTMLEncode jest zależną stroną kodową kontekstu, spowoduje to bezsensowne dane wyjściowe.
Więc będziesz musiał napisać własny koder HTML, aby obsłużyć sprawę.

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. Jak wstawić tablicę danych do mysql za pomocą php

  2. Znaki ucieczki, takie jak $ i % | MySQL i PHP

  3. Brak odpowiedzi od PHP na żądanie AJAX

  4. Używanie Solr z MySQL

  5. Zapytanie MYSQL - Jak wyświetlić prawidłowe wartości, a nie bloby, wykonując CONCAT i tworząc nową kolumnę z poprawnymi pomnożonymi wartościami całkowitymi?