Begrijpen hoe IIS ASP-codering verwerkt
Zoals met alle coderingsproblemen in Classic ASP helpt het om te begrijpen welk doel de verschillende commando's vervullen (omdat mensen ze maar al te vaak verkeerd gebruiken, omdat het het probleem lijkt op te lossen) .
<%@ Language = "VBScript" CodePage = 65001 %>
Deze regel wordt vaak verkeerd begrepen, de syntaxis <%@
is een "ASP @ Verwerkingsrichtlijn" en dient om IIS te vertellen hoe de ASP-pagina moet worden verwerkt en is waarschijnlijk een van de belangrijkste opdrachten als het gaat om correct werken met codering.
-
@Language
vertelt IIS welke geregistreerde Active Scripting Language moet worden gebruikt om de ASP-pagina te verwerken. -
@CodePage
vertelt IIS welke CodePage moet worden gebruikt om de ASP-pagina te verwerken. Als de pagina is opgeslagen metUTF-8
dan moet IIS weten bij het verwerken van de pagina dat het CodePage65001
. moet gebruiken (ook wel bekend alsUTF-8
) .
Dit betekent dat @CodePage
moet altijd overeenkomen met de fysieke codering die werd gebruikt toen de pagina werd gemaakt. Mogelijk moet u een geavanceerde teksteditor gebruiken om dit uit te werken, enkele voorbeelden zijn Notepad++
(toont codering op de statusbalk rechtsonder in het GUI-venster) en Visual Studio
(Heeft een verborgen menuopdracht genaamd Advanced Save Options
die toegankelijk is door de menubalk aan te passen) .
<% Response.CodePage = 65001 %>
Wederom vaak verkeerd begrepen, is het doel van dit commando om IIS te vertellen hoe dynamische strings moeten worden gecodeerd (met dynamische strings bedoelen we alles dat wordt uitgevoerd met Response.Write()
) . Misschien wel het belangrijkste onderdeel van het hele proces, als het verkeerd is ingesteld of als er aangenomen wordt dat coderingsmismatches kunnen optreden.
<% Response.CharSet = "UTF-8" %>
Dit commando stelt de ;charset=utf-8
. in in het Content-Type
HTTP-header wanneer het antwoord van de server naar de clientbrowser wordt verzonden, vertelt het de browser dat dit antwoord moet worden verwerkt als UTF-8
in plaats van de standaard. Betekenis code zoals
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
is overbodig en mag niet worden gebruikt. Ook vermeldenswaard is dat er een commando is voor het Content-Type
HTTP-header ook
Response.ContentType = "text/html"
waardoor het nog meer overbodig wordt dan het al was.