[HTML] Niet alle brackets worden omgezet in textarea

Pagina: 1
Acties:

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Mijn CMS'je geeft de gebruiker de mogelijkheid om templates aan te passen. In die templates kan hij / zij gedefinieerde [tokens] gebruiken. Dus:
  • op de server liggen templates opgeslagen vol [tokens]
  • als er een request voor een pagina naar de webserver gaat, haalt mijn CMS de goede template op en maakt een array van de [tokens] die gevonden worden
  • vervolgens worden de [tokens] recursief vervangen door de gerenderde onderdelen. Zo wordt [navigatie] vervangen door een navigatie menu en wordt [nieuws|5] vervangen door de titels van de laatste 5 nieuwsberichten
Dit alles werkt lekker, op 1 situatie na. De token [bodytext] wordt vervangen door de eigenlijke content van de pagina (= een artikel, een berichtenbord, een formulier, etc.). In het administratiegedeelte kan de gebruiker in een textarea de templates aanpassen. De macro [bodytext] bevat dan onder andere een textarea met daarin een template (met tokens). Om te voorkomen dat het renderen van de pagina in een eeuwige loop raakt, moet ik de symbolen [ en ] in die textarea vervangen door hun html nummers (&#91 en &#93). Met andere woorden, een textarea met daarin een simpel template zou er als volgt uit kunnen zien:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<textarea rows="16" cols="50">
<html>
  <head>
    <!--[if IE]>
    <style type="text/css">
    #main {height: 350px; overflow: visible;}
    </style>
  <![endif]-->
    [head]
  </head>
  <body>
    <div id="text">[bodytext]</div>
    <div id="footer">[footer]</div>
  </body>
</html>
</textarea>

Voor de duidelijkheid. Deze template ligt op de server opgeslagen als:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
  <head>
    <!--[if IE]>
    <style type="text/css">
    #main {height: 350px; overflow: visible;}
    </style>
  <![endif]-->
    [head]
  </head>
  <body>
    <div id="text">[bodytext]</div>
    <div id="footer">[footer]</div>
  </body>
</html>

In de browser wordt deze textarea echter niet helemaal goed gerenderd. In de browser ziet de textarea er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
  <head>
    <!--[if IE]>
    <style type="text/css">
    #main {height: 350px; overflow: visible;}
    </style>
  <![endif]-->
    [head]
  </head>
  <body>
    <div id="text">[bodytext]</div>
    <div id="footer">[footer]</div>
  </body>
</html>

Met andere woorden: de [ en ] haken bij de conditionele css statement worden niet weergegeven als haken. Hier blijft de html code zichtbaar. Hoe kan ik dit oplossen?

[ Voor 17% gewijzigd door Reveller op 11-01-2006 14:43 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

misschien handig om het relevante stukje code dat de [ omzet in entiteiten even te posten ?

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
TheRookie schreef op woensdag 11 januari 2006 @ 15:23:
misschien handig om het relevante stukje code dat de [ omzet in entiteiten even te posten ?
Dat leek me niet nodig, omdat de omzetting van [ ] naar html codes (in PHP) opzich goed gaat. Het probleem zit hem in de weergave in de browser. Vandaar dat het topic in /13 ipv /14 staat :) Maar voor de volledigheid:
PHP:
1
2
3
4
function macro_safe($input) {
  $entities = array('[' => '[', ']' => ']');
  return str_replace(array_keys($entities), array_values($entities), $input);
}

$input is hier een string waarvan de [ ] haken omgezet moeten worden naar html codes, omdat deze niet gerendered mogen worden.

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:09

crisp

Devver

Pixelated

Misschien ga je de mist in doordat je wellicht nog een keer extra htmlspecialchars over de content van je textarea heenhaalt (wat op zich goed is)?
Ik vermoed dat de inhoud van je textarea in je view-source er ongeveer zo uit zal zien:
code:
1
2
3
4
5
<html>
  <head>
    <!--[if IE]>
    <style type="text/css">
...

[ Voor 4% gewijzigd door crisp op 11-01-2006 16:39 ]

Intentionally left blank


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
crisp schreef op woensdag 11 januari 2006 @ 16:38:
Misschien ga je de mist in doordat je wellicht nog een keer extra htmlspecialchars over de content van je textarea heenhaalt (wat op zich goed is)?
Had ik ook al aan gedacht en heb dat daarom tbv debuggen uitgezet :)
Ik vermoed dat de inhoud van je textarea in je view-source er ongeveer zo uit zal zien:
code:
1
2
3
4
5
<html>
  <head>
    <!--[if IE]>
    <style type="text/css">
...
Wellicht was het wat onduidelijk, maar in de openingspost vermeldde ik al hoe de view-source eruit ziet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<textarea rows="16" cols="50">
<html>
  <head>
    <!--[if IE]>
    <style type="text/css">
    #main {height: 350px; overflow: visible;}
    </style>
  <![endif]-->
    [head]
  </head>
  <body>
    <div id="text">[bodytext]</div>
    <div id="footer">[footer]</div>
  </body>
</html>
</textarea>

Als je deze code opslaat als .htm bestand en deze in je browser bekijkt, zie je dat alle brackets, behalve die van de conditional css statement, ook daadwerkelijk als brackets weergegeven worden De vraag is waarom nu die van het css statement niet...?

[ Voor 24% gewijzigd door Reveller op 11-01-2006 16:45 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:09

crisp

Devver

Pixelated

Reveller schreef op woensdag 11 januari 2006 @ 16:43:
[...]
Wellicht was het wat onduidelijk, maar in de openingspost vermeldde ik al hoe de view-source eruit ziet:
Dat is sowieso niet goed; speciale karakters moet je binnen textarea-tags html-encoden...

[ Voor 38% gewijzigd door crisp op 11-01-2006 16:45 ]

Intentionally left blank


Verwijderd

met <![CDATA[..]]> er omheen zou het in theorie ook goed moeten gaan

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:09

crisp

Devver

Pixelated

Verwijderd schreef op woensdag 11 januari 2006 @ 19:10:
met <![CDATA[..]]> er omheen zou het in theorie ook goed moeten gaan

Vooropgesteld dat het om XHTML gaat geserveerd als application/xhtml+xml (wat ik betwijfel) wel ja ;)

Intentionally left blank

Pagina: 1