[ASP/XSLT] Special characters gaan fout

Pagina: 1
Acties:

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Ik heb een asp file welke een xml bestand aanmaakt, als voorbeeld deze:
XML:
1
2
3
4
5
6
<?xml version="1.0"?>
<forum>
<topic>
<forum_topic_subject>é</forum_topic_subject>
</topic>
</forum>
De inrelevante stukken heb ik er tussenuit gehaald uiteraard.

Dan wil ik dit serverside transformen dmv een xsl file naar html.
dit is de xsl file (ingekort):

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8" ?> 
<!DOCTYPE xsl:stylesheet [<!ENTITY nbsp ' '>]> 
<xsl:stylesheet version="1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" /> 

<xsl:template match="/">
<html>
<head>
    <title>naam</title>
</head>

<body>

<table>
    <tr>
        <td><xsl:value-of select="/forum/topic/forum_topic_subject" disable-output-escaping="yes" /></td>
    </tr>
</table>

</body>
</html>


Dit geeft dan iets als dit:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>naam</title>
</head>
<body>

<table>
  <tr>
     <td>é</d>
  </tr>
</table>

</body>
</html>


Nou vraag ik me een aantal dingen af:
Waar tovert hij die META met de charset vandaan?
waarom geeft hij é ipv é? Dit zal waarschijnlijk aan de charset liggen?

dit is de asp die het allemaal uitvoert:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
'Load XML ( werkt correct )
set oXML = Server.CreateObject("MSXML2.DOMDocument.3.0")
oXML.async = false
oXML.validateOnParse = false
oXML.resolveExternals = false
sXML = sXML & "<forum></forum>"
oXML.loadXML sXML
set rNode = oXML.documentElement

'topic node adden (werkt correct)
set nNode = AddXMLNode(oXML, rNode, "topic", "", false)
        
'functie om node te adden in topic in xml file ( werkt correct )        
AddXMLNode oXML, nNode, "forum_topic_subject", "é", false

 'parsen (hier gaat het vermoedelijk pas mis)
call XMLXSLTTrans(oXML,strUserSkin & "/" & parsefile)

function XMLXSLTTrans(XML,XSLT) 
    Dim objXSL

    Set objXSL = Server.CreateObject("MSXML2.DOMDocument.3.0")
    Set xsltd = server.CreateObject("MSXML2.XSLTemplate.3.0")
    objXSL.validateOnParse = false 'nee niet validaten lijkt me
    objXSL.load(Server.MapPath(XSLT)) 'xsl file laden

    call XML.transformNodeToObject(objXSL, response) 'direct outputten naar de browser

End Function


Nu snap ik totaal niet waar xml die Meta tag vandaan tovert, en waarom hij (terwijl de xml é heeft) é laat zien.
Ik ben al een hele dag aan het zoeken, maar weet niet echt waar ik naar moet zoeken dus het schiet niet erg op. Ik zou heel blij zijn als iemand me hier mee zou kunnen helpen :)

[ Voor 30% gewijzigd door Mischa_NL op 11-08-2005 18:43 ]


Verwijderd

Probeer het eens met een CDATA sectie. Alles binnen een CDATA sectie wordt door de parser overgeslagen.

code:
1
2
3
4
5
<tagname>
<![CDATA[
je tekst met rare tekens
]]>
</tagname>

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Haalt niks uit, alles blijft hetzelfde ;(

als ik overigens ipv:
code:
1
<td><xsl:value-of select="/forum/topic/forum_topic_subject" disable-output-escaping="yes" /></td>
dit:
code:
1
<td>é</td>
gebruik geeft hij wel gewoon de é

[ Voor 74% gewijzigd door Mischa_NL op 11-08-2005 19:06 ]


Verwijderd

heb je ook al een andere encoding type geprobeerd?

zie hier een voorbeeld, waar ook "rare" tekens gebruikt worden als voorbeeld:
http://www.w3schools.com/xml/xml_encoding.asp

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
De xml file genereert de tekens goed de tranform zorgt ervoor dat het een zooitje wordt.

ik heb trouwens ISO-8859-1 en ISO-8859-15 ook geprobeerd.

Als ik namelijk vlak voor en na deze regel :
code:
1
call XML.transformNodeToObject(objXSL, response)
de xml file rechtstreeks output staat er gewoon een é in.

Ik heb nu iets gevonden:

Een andere xml file, (die niet dynamisch wordt opgebouwd) geeft WEL correct een é terug.
Behalve als ik voor de transform een : response.charset = "ISO-8859-15" zet geeft hij ook die rare characters in de xml files, met utf-8 niet.

Dat betekent dat er toc iets niet goed zit in die xml file denk ik...

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 23:13

alienfruit

the alien you never expected

Wat gebeurd als je die disable-attribute verplaats naar:
<xsl:output method="html" encoding="UTF-8" disable-output-escaping="yes" />

[ Voor 59% gewijzigd door alienfruit op 11-08-2005 19:36 ]


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Ik heb even getransformeerd met XMLSpy en als ik je bestand netjes opsla als UTF-8 dan is er geen enkel probleem.
é krijg ik in beeld als ik de UTF-8 output van de transformatie als ISO-8859-15, maar dat had je zelf al gezien.

Je andere vraag: de META tag wordt toegevoegd door je XSLT processor. Dit komt omdat je outputtype HTML hebt opgegeven. In 1.0 is er geen standaard manier om dit uit te schakelen (of je moet XML gaan outputten). Verschillende XSLT processoren (zoals Xalan) hebben een constructie als omit-meta="yes" als optie, maar dan ga je van de standaard afwijken.

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
probleem opgelost :)

call XML.transformNodeToObject(objXSL, response)

veranderen in

response.write(XML.transformNode(objXSL))

Het blijft een vaag taaltje ;)

EDIT/

Toch niet, nu werken de é's die eerst wel werkten niet meer :/.
Als ik in FF mijn character encoding op ISO-8859-1 zet, werken ze wel.
Zet ik hem op UTF-8 dan werken ze niet.
Ik dacht dus: geeft de database misschien geen goed characterset terug, maar dat kan ook niet aangezien hij bij de ene waarde uit de database onder iso WEL de é goed laat zien, en bij een andere waarde NIET. Het zijn wel verschillende tabellen overigens.

Ik begin het steeds vager te vinden...

EDIT2/ Toch gevonden. Uiteindelijk gaf hij me steeds verkeerde waarden terug omdat ze TOCH verkeerd in de database opgeslagen stonden (verkeerd charset ofzo :S)

Iig de fix die ik als eerste aandroeg werkt, alleen waarden die al in de database stonden, stonden er niet goed in!

Tnx voor de hulp maar weer :)

[ Voor 80% gewijzigd door Mischa_NL op 11-08-2005 20:41 ]

Pagina: 1