Christian Seiler: Problem mit Maskierung

Beitrag lesen

Hallo,

Das Problem tritt an der Stelle:

setTimeout('live_search('search ....


> auf, da er erwartet das ich live\_search sofort wieder schliesse. Aber ich möchte die Parameter gerne mit übergeben.  
> Wie Maskiere ich das ganze richtig, damit der Parser es versteht?  
  
`$output = '... setTimeout(\'live_search(\\\'search .... ';`{:.language-php}  
  
Die erste Maskierung per \ ist notwendig, damit PHP nicht denkt, dass der String zuende ist. Das heißt: Sobald PHP den String aus Deiner Quelldatei eingelesen hat, steht im Speicher (was dann im Endeffekt auch ausgegeben wird) nur noch:  
  
`setTimeout('live_search(\'search ...`{:.language-javascript}  
  
In JavaScript musst Du das innere von setTimeout maskieren, da Du dort JavaScript-Code als String übergeben musst. Wenn also das setTimeout erfolgt, wird live\_search ('search ... ausgeführt.  
  
Oder, anders herum: Du willst, dass live\_search ('search ... ausgeführt wird. Das ganze soll in einem Timeout geschehen, d.h. Du musst das Ding in einen String packen, d.h. wenn Du ' als Begrenzer wählst musst Du alle ' durch \' maskieren und alle \ durch \\.  Damit kommt dann 'live\_search (\'search ... heraus. Das nimmst Du als Parameter für setTimeout, d.h. setTimeout ('live\_search (\'search ... Diesen Javascript-Code willst Du nun in PHP ausgeben lassen - und zwar innerhalb eines '-Strings. Hier musst Du (diesmal wegen der PHP-Maskierregeln) wieder alle ' durch \' maskieren und alle \ durch \\ - damit erhälst Du '... setTimeout(\'live\_search(\\\'search ... ' - was genau die obige Zeile ist.  
  
Viel Spaß beim Überblick-Behalten. ;-)  
  
Viele Grüße,  
Christian