[Javascript+php] probleem met ' en "

Pagina: 1
Acties:
  • 390 views sinds 30-01-2008
  • Reageer

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Ik heb een vervelend foutje, in firefox overigens geen last van maar ie begint te zeuren,
wat verkote code om het te verduidelijken

PHP:
1
2
3
4
5
6
7
8
9
10
function knoppen(){
var knoppen= new Array(
'<a href="#"><img class="opmaak_button" onmouseover="this.style.border = \'1px solid;\'" 
onmouseout="this.style.border = \'1px solid #ccc;\'" src="'+path+'images/editor/save.gif" 
onClick="opslaan()" title="Opslaan"></a>',

'<a href="#"><img class="opmaak_button" onmouseover="this.style.border = \'1px solid;\'" 
onmouseout="this.style.border = \'1px solid #ccc;\'" src="'+path+'images/editor/savehtml.gif" 
onClick="opslaanhtml()" title="Opslaan van HTML code"></a>'
);


het probleem zit hem in het stukje: "this.style.border = \'1px solid #ccc;\'"

Ik heb echter geen idee hoe ik dit anders kan oplossen of weergeven.
heb al geprobeerd om met javascript een var opmaak aan te maken waar dan vervolgens
"1px solid #ccc" in stond echter hielp dit.

Hoe kan ik dit probleem creatief oplossen? :)

Modelbouw - Alles over modelbouw, van RC tot diorama


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ik neem aan dat je probleem ligt aan 't escapen van de '

Waarom gebruik je er niet gewoon " voor :?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • FlorisB
  • Registratie: Augustus 2004
  • Laatst online: 10:20
code:
1
2
3
<?php 
function knoppen(){ 
var knoppen= new Array(

Ehhh? var in een functie? new Array? Dat kennen we in PHP niet :)

Misschien handig om sowieso echte code te gebruiken, ik snap t punt namelijk niet nu:)

[ Voor 25% gewijzigd door FlorisB op 15-11-2007 21:55 ]


  • Sjoerd
  • Registratie: December 2003
  • Niet online
BtM909 schreef op donderdag 15 november 2007 @ 21:52:
Ik neem aan dat je probleem ligt aan 't escapen van de '

Waarom gebruik je er niet gewoon " voor :?
omdat het dan ook niet werkt aangezien je dan het volgende krijgt

HTML:
1
onmouseover="this.style.border = "1px solid;""


en dan wil mijn mouseover niet meer :)
FlorisB schreef op donderdag 15 november 2007 @ 21:55:
code:
1
2
3
<?php 
function knoppen(){ 
var knoppen= new Array(

Ehhh? var in een functie? new Array? Dat kennen we in PHP niet :)

Misschien handig om sowieso echte code te gebruiken, ik snap t punt namelijk niet nu:)
het is de echte code (alleen een hoop items weg gelaten)
maar het probleem is dus dat dit stukje javascript vervolgens geechod wordt in een php pagina:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$output=" 
<html>
<head>
<script src=\"".$path."/js/editor.js\" language=\"javascript\" type=\"text/javascript\"></script>
<SCRIPT LANGUAGE=\"Javascript\" src=\"".$path."/js/colorpicker.js\"></SCRIPT>
<SCRIPT LANGUAGE=\"JavaScript\">
var cp = new ColorPicker(); // DIV style
</SCRIPT>
</head>
<body> 
<SCRIPT LANGUAGE=\"JavaScript\">cp.writeDiv()</SCRIPT>

<form id=\"content\" name=\"content\" method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">
<div id=\"rijopmaak\">
<script language=\"javascript\" type=\"text/javascript\">
//opmaak knoppen
    var knoppen=knoppen(\"".$rechten."\",\"".$path."\",\"".$contactform."\",\"".$afbeelding."\",\"".$fotogallerij."\");
    for(var i=0;i<knoppen.length;i++){
    document.write(knoppen[i]);
    }
    document.close;
</script>
</div>
";


op zo'n manier ;)

[ Voor 62% gewijzigd door Sjoerd op 15-11-2007 22:03 ]

Modelbouw - Alles over modelbouw, van RC tot diorama


  • Blackbird-ce
  • Registratie: September 2005
  • Laatst online: 11-01 09:53
heel lelijk misschien, maar met chr(34) ipv " werken?

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 10:50

orf

Als je een lap javascript wilt outputten, is het meestal makkelijke / mooier om er een simpele template voor te maken:

template.tpl
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
<SCRIPT LANGUAGE="JavaScript">cp.writeDiv()</SCRIPT> 

<form id="content" name="content" method="post" action="{action}"> 
<div id="rijopmaak"> 
<script language="javascript" type="text/javascript"> 
//opmaak knoppen 
    var knoppen=knoppen("{rechten}","{path}","{contactform}","{afbeelding}","{fotogallery}"); 
      for(var i=0;i<knoppen.length;i++){ 
    document.write(knoppen[i]); 
    } 
    document.close; 
</script>


PHP:
1
2
3
4
5
$template = file_get_contents('template.tpl');
$find = array('{action}', '{rechten}', '{path}', '{afbeelding}', '{fotogallery}');
$replace = array($action, $rechten, $path, $afbeelding, $fotogallery);

$output = str_replace($find, $replace, $template);


Dan hoef je helemaal niet te kijken naar het escapen van quotes en blijft zowel je javascript als je php code leesbaar en onderhoudbaar.

  • Sjoerd
  • Registratie: December 2003
  • Niet online
orf schreef op vrijdag 16 november 2007 @ 00:16:
Als je een lap javascript wilt outputten, is het meestal makkelijke / mooier om er een simpele template voor te maken:

...

Dan hoef je helemaal niet te kijken naar het escapen van quotes en blijft zowel je javascript als je php code leesbaar en onderhoudbaar.
Hej das een goeie :) even kijken of ik daarmee uit de voeten kan ;)

raar probleem :X wanneer ik het volgende doe:
return file_get_contents("editor.tpl"); (waarbij editor.tpl bestaat en mijn javascript inhoud heeft)

krijg ik niets gereturned van mijn functie bij return file_get_contents("http://www.google.nl"); bv wel waaraan kan dit liggen? het moest een absoluut path zijn :)

[ Voor 26% gewijzigd door Sjoerd op 16-11-2007 10:13 ]

Modelbouw - Alles over modelbouw, van RC tot diorama


  • Sjoerd
  • Registratie: December 2003
  • Niet online
Oke de template is werkend, is in ieder geval al een stuk overzichtelijker :)

maaar 8)7 het probleem blijft natuurlijk gewoon bestaan, zie javascript functie

JavaScript:
1
2
3
4
5
6
7
8
9
var knoppen= new Array(
'<a href="#"><img class="opmaak_button" onmouseover="this.style.border = \'1px solid;\'" 
onmouseout="this.style.border = \'1px solid #ccc;\'" src="'+path+'images/editor/save.gif" 
onClick="opslaan()" title="Opslaan"></a>',

'<a href="#"><img class="opmaak_button" onmouseover="this.style.border = \'1px solid;\'" 
onmouseout="this.style.border = \'1px solid #ccc;\'" src="'+path+'images/editor/savehtml.gif" 
onClick="opslaanhtml()" title="Opslaan van HTML code"></a>'
); 


het is gewoon niet mogelijk om die array te starten met iets anders dan ' " echter heb ik dus binnen de array zowel combinaties van ' als " nodig voor die mouseover's O-)

Modelbouw - Alles over modelbouw, van RC tot diorama


  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
Ik versta eigenlijk niet waarom je je code mixed met (HTML)output. Zelf werk ik meestal als volgt:

code:
1
2
/00-snippets/
/00-snippets/bestand.txt


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
  interpreteert tekstbestand in dir 00-snippets
  alles in het bestand vd vorm $text[...] wordt omgezet met gegegens van arg myArray
 */
function read_and_interprete( bestand.txt, myArray )
{
}

maak array met variablen

buttons = new Array ('openen', 'opslaan')

loop 
{
   echo function read_and_interprete( bestand.txt, buttons )
}

bestand.txt :
HTML:
1
2
<a href="#"><img class="opmaak_button" onmouseover="this.style.border = '1px solid';"  onmouseout="this.style.border = '1px solid #ccc';" 
src="images/editor/$text.gif" onClick="$text()" title="$text">$text</a>


Noteer overigens dat de ; wellicht na de \' kan staan en dat dit mss je prob ook kan oplossen?

[ Voor 5% gewijzigd door moozzuzz op 16-11-2007 10:54 ]


  • Sjoerd
  • Registratie: December 2003
  • Niet online
moozzuzz schreef op vrijdag 16 november 2007 @ 10:54:
Ik versta eigenlijk niet waarom je je code mixed met (HTML)output. Zelf werk ik meestal als volgt:
dat ga ik zometeen ook nog is bekijken.
net alles zover mogelijk 'uitgekleed' en dit op 1 lege pagina gezet
gevolg: probleem ligt ergens anders dan ik dacht vermoed ik :)


HTML:
1
2
3
4
5
6
7
8
<html><body>
<a href="#">
<img onmouseover="this.style.border = '1px solid;'" 
onmouseout="this.style.border = '1px solid #ccc;'" 
src="http://gathering.tweakers.net/usericons/99335/pepernoot.gif"
onClick="opslaan()" title="Opslaan">
</a>
</body></html>


Firefox doet het perfect echter geeft IE een foumelding (ergens op een onbestaand regel nummer)
dus het zit hem in "this.style.border = '1px solid;'" deze manier van werken :?


EDIT: Oplossing voor bovenstaand probleem gevonden

code:
1
2
onmouseover="this.className = 'opmaak_buttonover'" 
onmouseout="this.className = 'opmaak_button'"


Dus van class switche en het werkt wel in IE :)

[ Voor 18% gewijzigd door Sjoerd op 16-11-2007 13:01 ]

Modelbouw - Alles over modelbouw, van RC tot diorama


  • Stijn
  • Registratie: Februari 2005
  • Laatst online: 13-12-2025
Je moet trouwens ook geen puntkomma in de waarde die je aan this.style.border meegeeft te zetten, weet niet of het echt wat uitmaakt maar hij hoort er in ieder geval niet.

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02-2025

Bozozo

Your ad here?

Als je een grote lap tekst wilt echo'en kun je sowieso beter de speciale heredoc syntax gebruiken; zie Practical PHP (sowieso een uitstekende site).

TabCinema : NiftySplit

Pagina: 1