[PHP / JS] Unterminated string literal: hoe op te lossen?

Pagina: 1
Acties:

Onderwerpen


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb het volgende in een textarea getypt en in de database opgeslagen:
code:
1
2
<P>Dit is een <STRONG>test</STRONG>.</P>
<P>Paragraaf 2:<BR>Dit is een nieuwe regel</P>

Nu wil ik deze tekst als value van een javascript-variabele in een pagina wegschrijven:
PHP:
1
2
3
4
5
$content = db_result(db_query("SELECT body FROM content WHERE cid = 5"), 0);

echo '<script language="javascript">'
echo 'strValue="'.addslashes(htmlspecialchars(nl2br($content))).'"';
echo '</script>';

Dit werkt echter niet. Firefox gaf als error:
Error: unterminated string literal
Source File: http://localhost/cms/story/edit/112
Line: 76, Column: 11
Source Code:
strValue:"<P>Dit is een <STRONG>test</STRONG>.</P><br />
Met andere woorden: hij valt over het feit dat de tweede paragraaf "<P>Paragraaf 2:<BR>Dit is een nieuwe regel</P>" op een andere regel begint. Moet ik nu alle whitespace tussen verschillende regels er tussenuit filteren? Wat doe ik verkeerd?

"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
  • Nu online

crisp

Devver

Pixelated

PHP:
1
$data = addcslashes($data, "\0\n\r\t\\'/");

escaped ook newlines

Intentionally left blank


  • HansMij
  • Registratie: Mei 2002
  • Laatst online: 13-09 14:42
PHP:
1
echo '<script language="javascript">'


mag je even een puntkomma achter zetten ;)

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

HansMij schreef op donderdag 17 november 2005 @ 16:36:
PHP:
1
echo '<script language="javascript">'


mag je even een puntkomma achter zetten ;)
Maak het dan meteen valid html:
PHP:
1
echo '<script type="text/javascript">';

;)

Intentionally left blank


  • HansMij
  • Registratie: Mei 2002
  • Laatst online: 13-09 14:42
crisp schreef op donderdag 17 november 2005 @ 16:42:
[...]

Maak het dan meteen valid html:
PHP:
1
echo '<script type="text/javascript">';

;)
.. OK daar heb jij een punt. :*) Ik blijf me trouwens wel verbazen over de rare manier van een website vullen. $content doet vermoeden dat hier de content voor de website in een javascript gaat, die waarschijnlijk gebruikt wordt om van een div of span de InnerHTML te vullen ofzo...

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
HansMij schreef op donderdag 17 november 2005 @ 16:47:
[...]
.. OK daar heb jij een punt. :*) Ik blijf me trouwens wel verbazen over de rare manier van een website vullen. $content doet vermoeden dat hier de content voor de website in een javascript gaat, die waarschijnlijk gebruikt wordt om van een div of span de InnerHTML te vullen ofzo...
Ik ben bezig met een wysiwyg editor, die zijn inhoud krijgt van de strValue variabele. Bedankt trouwens, Crisp - het werkt perfect!

"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."


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Een fout zoals jij die krijgt is een fout in je PHP code, een syntaxis fout dus. Dat kun je ook zien aan het feit dat je PHP source code in beeld krijgt en regelnummers. Zulke zaken mag en zal een standaard client NOOIT te zien krijgen bij werkende code.

Dat is misschien een vuistregeltje om te onthouden als je zo'n fout krijgt en niet weet waar de fout zit.

Dat krimpt je zoekscope meteen een heel eind in, want je weet dat je je PHP code moet nalopen en bijvoorbeeld niet de naar de client teruggegeven strings. Bovendien geeft het regelnummer en melding ook een goede indicatie van de locatie en aard van de fout. Ze zien er misschien cryptisch uit, maar als je hem een paar keer goed naleest, heb je meestal wel een idee van wat voor soort fout het is. Dat heb ik tenminste in Java wel en meestal in andere talen ook wel.

Tenslotte heb je ook nog google. Als je daar de foutmelding ("Error: unterminated string literal" in dit geval) daarin gooit, krijg je meestal wel een site die een aantal hints geeft. Moet je natuurlijk jouw filenames en stukken source code uit de foutmelding halen. Anders vindt ie niks.

ps. Die laatste hint is geen flame, dus niet iedereen door het dak springen aub. :p

Fat Pizza's pizza, they are big and they are cheezy


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

JKVA schreef op donderdag 17 november 2005 @ 20:18:
Een fout zoals jij die krijgt is een fout in je PHP code, een syntaxis fout dus. Dat kun je ook zien aan het feit dat je PHP source code in beeld krijgt en regelnummers. Zulke zaken mag en zal een standaard client NOOIT te zien krijgen bij werkende code.
Volgens mij was dat toch echt een javascript error hoor; client-side dus ;)

Intentionally left blank


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

crisp schreef op donderdag 17 november 2005 @ 20:21:
[...]

Volgens mij was dat toch echt een javascript error hoor; client-side dus ;)
Omg, je hebt gelijk. Ik dacht dat ik een .php ergens in de foutmelding zag staan. 8)7

Verder sta ik nog steeds achter de opmerking zoals die er staat. (niet in deze context dan :))

Fat Pizza's pizza, they are big and they are cheezy


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@JKVA: Afbeeldingslocatie: http://images.fok.nl/s/static.gif

Ik heb er overigens \" aan toegevoegd, omdat 'ie zich anders nog steeds stuk beet op strings met html tags met dubbel-gequote properties (a href="dittum.htm", etc):
PHP:
1
addcslashes($content, "\0\n\r\t\\'/\"")

[ Voor 25% gewijzigd door Reveller op 17-11-2005 20: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
  • Nu online

crisp

Devver

Pixelated

Reveller schreef op donderdag 17 november 2005 @ 20:44:
@JKVA: [afbeelding]

Ik heb er overigens \" aan toegevoegd, omdat 'ie zich anders nog steeds stuk beet op strings met html tags met dubbel-gequote properties (a href="dittum.htm", etc):
PHP:
1
addcslashes($content, "\0\n\r\t\\'/\"")
hmmz, tsja - ik gebruik altijd single quotes voor strings in JS ;)

Intentionally left blank

Pagina: 1