sql >> Databáze >  >> RDS >> Mysql

Klasické kódování ASP, MySQL nebo ODBC UTF8

Máte šanci na slovinská písmena podle tohoto mapování a výňatek z článku na wiki Windows-1252 :

Zde jsou věci, které je třeba udělat:

  1. Používejte soubory s kódováním UTF-8 (bez kusovníku), abyste mohli obsahovat pevně zakódovaný text. (✔ již hotovo)

  2. Zadejte UTF-8 pro znakovou sadu odpovědi s ASP na straně serveru nebo s metaznačkami na straně klienta. (✔ již hotovo)

  3. Řekněte serveru MySQL, že vaše příkazy jsou ve znakové sadě utf-8 a očekáváte sady výsledků zakódované v utf-8. Přidejte počáteční příkaz do připojovacího řetězce:...;stmt=SET NAMES 'utf8';...

  4. Nastavte Response.CodePage na 1252.

Testoval jsem následující skript a funguje jako kouzlo.

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>

Poslední poznámka:

Když potřebujete použít kódování html na řetězce načtené z databáze, neměli byste již používat Server.HTMLEncode, protože Response.Codepage je 1252 na straně serveru a protože Server.HTMLEncode je závislá na kontextové kódové stránce, způsobí to nesmyslné výstupy.
Takže si budete muset napsat svůj vlastní html kodér, abyste případ zvládli.

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. Můj příkaz where s funkcí JSON_extract ve sloupci s možnou hodnotou Null je potvrzen, když je hodnota uvedeného sloupce NULL?

  2. Jak uložit nastavení pro celý web do databáze?

  3. SQL dotaz pro výběr příspěvků patřících do více kategorií

  4. Upsert s atributem updated updated_at