[Javascript+php] probleem met ' en "

Pagina: 1
Acties:
  • 392 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: 08:19
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: 24-02 16:39
heel lelijk misschien, maar met chr(34) ipv " werken?

  • orf
  • Registratie: Augustus 2005
  • Nu online

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: 24-02 14:09
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: 15-02 17:12

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