Du har en chans till slovenska bokstäver enligt denna mappning a> och ett utdrag från Windows-1252 wikiartikel :
Här är saker att göra:
-
Använd UTF-8 (utan BOM)-kodade filer mot möjligheten att innehålla hårdkodad text. (✔ redan gjort)
-
Ange UTF-8 för svarsteckenuppsättning med ASP på serversidan eller med metataggar på klientsidan. (✔ redan gjort)
-
Berätta för MySQL-servern att dina kommandon finns i teckenuppsättning utf-8, och du förväntar dig utf-8-kodade resultatuppsättningar. Lägg till en initialsats till anslutningssträngen:
...;stmt=SET NAMES 'utf8';...
-
Ställ in Response.CodePage till 1252.
Jag har testat följande manus och det fungerar som en charm.
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>
Som en sista anmärkning:
När du behöver tillämpa html-kodning på strängar som hämtas från databasen, bör du inte använda Server.HTMLEncode längre eftersom Response.Codepage är 1252 på serversidan och eftersom Server.HTMLEncode är beroende av kontextkodtabellen kommer detta att orsaka sluddrig utdata.
Så du måste skriva din egen html-kodare för att hantera ärendet.
Function MyOwnHTMLEncode(ByVal str)
str = Replace(str, "&", "&")
str = Replace(str, "<", "<")
str = Replace(str, ">", ">")
str = Replace(str, """", """)
MyOwnHTMLEncode = str
End Function
'Response.Write MyOwnHTMLEncode(rs("myfield").value)