sql >> Database >  >> RDS >> Mysql

Klassieke ASP-, MySQL- of ODBC UTF8-codering

Je hebt kans op Sloveense letters volgens deze mapping en een fragment uit Windows-1252 wiki-artikel :

Dit zijn de dingen die u moet doen:

  1. Gebruik UTF-8 (zonder stuklijst) gecodeerde bestanden tegen de mogelijkheid om hardgecodeerde tekst te bevatten. (✔ al gedaan)

  2. Specificeer UTF-8 voor responscharset met ASP aan serverzijde of met metatags aan clientzijde. (✔ al gedaan)

  3. Vertel de MySQL-server dat uw opdrachten in tekenset utf-8 staan ​​en dat u utf-8-gecodeerde resultatensets verwacht. Voeg een eerste instructie toe aan de verbindingsreeks:...;stmt=SET NAMES 'utf8';...

  4. Stel de Response.CodePage in op 1252.

Ik heb het volgende script getest en het werkt als een tierelier.

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>

Als laatste opmerking:

Wanneer u html-codering moet toepassen op tekenreeksen die uit de database zijn opgehaald, moet u Server.HTMLEncode niet meer gebruiken omdat Response.Codepage 1252 is aan de serverzijde en aangezien Server.HTMLEncode een afhankelijke contextcodepagina is, zal dit wartaal-uitvoer veroorzaken.
Dus je moet je eigen html-encoder schrijven om de zaak af te handelen.

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. Hoe schakel ik referentiële integriteit in Postgres 8.2 uit?

  2. .NET MySqlCommand @ placeholder conflicteert met MySQL-variabele

  3. Waarom wordt er maar één resultaat van mijn zoekopdracht weergegeven?

  4. Converteer Unixtime naar Datetime SQL (Oracle)