Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pengkodean ASP, MySQL, atau ODBC UTF8 klasik

Anda memiliki peluang untuk huruf Slovenia menurut pemetaan dan kutipan dari artikel wiki Windows-1252 :

Berikut hal-hal yang harus dilakukan:

  1. Gunakan file yang disandikan UTF-8 (tanpa BOM) terhadap kemungkinan berisi teks hard-coded. (✔ sudah selesai)

  2. Tentukan UTF-8 untuk rangkaian karakter respons dengan ASP di sisi server atau dengan tag meta di sisi klien. (✔ sudah selesai)

  3. Beri tahu Server MySQL bahwa perintah Anda ada di charset utf-8, dan Anda mengharapkan set hasil yang disandikan utf-8. Tambahkan pernyataan awal ke string koneksi :...;stmt=SET NAMES 'utf8';...

  4. Setel Response.CodePage ke 1252.

Saya telah menguji skrip berikut dan berfungsi dengan sangat baik.

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>

Sebagai komentar terakhir:

Ketika Anda perlu menerapkan pengkodean html ke string yang diambil dari database, Anda tidak boleh menggunakan Server.HTMLEncode lagi karena Response.Codepage adalah 1252 di sisi server dan karena Server.HTMLEncode bergantung pada halaman kode konteks, ini akan menyebabkan keluaran omong kosong.
Jadi, Anda harus menulis encoder html Anda sendiri untuk menangani kasus ini.

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. Tambahkan kolom baru ke tabel yang ada dalam migrasi di Laravel

  2. Jumlah parameter kueri MySQL cocok dengan argumen yang diteruskan untuk dieksekusi, tetapi Python tidak memunculkan semua argumen yang dikonversi

  3. Kode Kesalahan:1822 ketika tipe data cocok, dengan kunci komposit

  4. Jenis bidang basis data terbaik untuk URL

  5. cara menambahkan tanggal (DateTime.now) ke database mySql di C#