Melzmann: Problem mit Maskierung

Hallo Community,
Möchte gerne einen html code mit javascriptaufrufen in eine Variable in PHP speichern, jedoch habe ich Probleme mit der Maskierung:

  
$output = '<input class="field" name="searchword" id="mod_search_searchword" maxlength="20" alt="search" class="inputbox'. $moduleclass_sfx .'" type="text" size="'. $width .'" value="'. $text .'" onkeyup="setTimeout(\'live_search(\'searchword=\'+document.search_field.searchword.value+\'&option=com_search&Itemid=2\', \'search\');\', 500)" onblur="opacity(\'mod_search_searchword\',99,50); if(this.value==\'\') this.value=\''. $text .'\';" onfocus="opacity(\'mod_search_searchword\',50,99); if(this.value==\''. $text .'\') this.value=\'\';" />';  

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?

Danke schon mal im Vorraus!

Grüße,
Melzmann

  1. hi,

    Wie Maskiere ich das ganze richtig, damit der Parser es versteht?

    Mach dir das Leben nicht schwerer, als es sein muss - verzichte auf die ganze Maskiererei, und verwende die Heredoc-Syntax.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. 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  
    
    
  3. 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?  
    
    ~~~javascript
      
    // Original:  
    onkeyup="setTimeout(  
    \'live_search(\' // string beginnt für JavaScript und endet  
    // hier würde ein `+ \'` fehlen  
    searchword=\' + document.search_field.searchword.value + \'&option=com_search&Itemid=2\', \'search\');  
    \', 500)"  
    // ist live_search eine function? Wenn ja warum ist es dann als String \'\' gekennzeichnet?  
    // Mein Vorschlag:  
      
    onkeyup="setTimeout(  
    live_search(\'searchword=\' + document.search_field.searchword.value + \'&option=com_search&Itemid=2\', \'search\'), 500)"  
    
    

    GodLike

  4. Hallo,
    ich danke euch für eure Antworten! Hab mich dann für die Heredoc Variante entschieden... und es Funktioniert. ;)

      
    $output = <<<test  
    <input class="field" name="searchword" id="mod_search_searchword" maxlength="20"  
    alt="search" class="inputbox'. $moduleclass_sfx" type="text" size="$width" value="$text"  
    onkeyup="setTimeout('live_search(\'searchword=\\'+document.search_field.searchword.value+\\'&option=com_search&Itemid=2\', \'search\');', '500')"  
    onblur="opacity('mod_search_searchword',99,50); if(this.value=='') this.value='$text';"  
    onfocus="opacity('mod_search_searchword',50,99); if(this.value=='$text') this.value='';" />  
    test;  
    
    

    Schönen Abend noch,
    Melzmann