sql >> データベース >  >> RDS >> Mysql

従来のASP、MySQL、またはODBCUTF8エンコーディング

    このマッピング およびWindows-1252wiki記事 からの抜粋 :

    やるべきことは次のとおりです。

    1. ハードコードされたテキストが含まれる可能性を防ぐために、UTF-8(BOMなし)でエンコードされたファイルを使用します。 (✔すでに完了)

    2. サーバー側でASPを使用するか、クライアント側でメタタグを使用する応答文字セットにUTF-8を指定します。 (✔すでに完了)

    3. MySQLサーバーにコマンドがcharsetutf-8であり、utf-8でエンコードされた結果セットを期待していることを伝えます。接続文字列に最初のステートメントを追加します:...;stmt=SET NAMES 'utf8';...

    4. Response.CodePageを1252に設定します。

    次のスクリプトをテストしましたが、それは魅力のように機能します。

    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>
    

    最後のコメントとして:

    データベースからフェッチされた文字列にhtmlエンコーディングを適用する必要がある場合、Response.Codepageはサーバー側で1252であり、Server.HTMLEncodeは依存コンテキストコードページであるため、Server.HTMLEncodeを使用しないでください。
    したがって、ケースを処理するには、独自のhtmlエンコーダーを作成する必要があります。

    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. Javaでタイムスタンプを日付に変換する

    2. JPA SequenceGeneratorおよびGeneratedValue:クラスごとにのみ一意の名前/ジェネレータプロパティ?

    3. Javascript関数はphpスクリプトを投稿して呼び出します

    4. 複数のCSVファイルをpostgresにコピーします