Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mã hóa ASP, MySQL hoặc ODBC UTF8 cổ điển

Bạn có cơ hội nhận được các chữ cái tiếng Slovenia theo ánh xạ này và một đoạn trích từ bài viết wiki Windows-1252 :

Đây là những việc cần làm:

  1. Sử dụng các tệp được mã hóa UTF-8 (không có BOM) để chống lại khả năng chứa văn bản được mã hóa cứng. (✔ đã hoàn thành)

  2. Chỉ định UTF-8 cho bộ ký tự phản hồi với ASP ở phía máy chủ hoặc với thẻ meta ở phía máy khách. (✔ đã hoàn thành)

  3. Cho Máy chủ MySQL biết các lệnh của bạn nằm trong bộ ký tự utf-8 và bạn mong đợi các bộ kết quả được mã hóa utf-8. Thêm câu lệnh ban đầu vào chuỗi kết nối:...;stmt=SET NAMES 'utf8';...

  4. Đặt Response.CodePage thành 1252.

Tôi đã thử nghiệm tập lệnh sau và nó hoạt động giống như một sự quyến rũ.

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>

Như một nhận xét cuối cùng:

Khi bạn cần áp dụng mã hóa html cho các chuỗi được tìm nạp từ cơ sở dữ liệu, bạn không nên sử dụng Server.HTMLEncode nữa do Response.Codepage là 1252 ở phía máy chủ và vì Server.HTMLEncode là mã hóa ngữ cảnh phụ thuộc, điều này sẽ gây ra kết quả đầu ra vô nghĩa.
Vì vậy, bạn sẽ cần phải viết bộ mã hóa html của riêng mình để xử lý trường hợp này.

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. Chuyển đổi số thập phân được lưu trữ dưới dạng varchar thành datetime

  2. Truy vấn với GROUP BY và ORDER BY không hoạt động khi nhiều cột trong SELECT được chọn

  3. danh tính mysql và asp.net

  4. Nhận các mục nhập cuối cùng bằng cách sử dụng GROUP BY

  5. Ví dụ DAYNAME () - MySQL