2013-05-09 5 views
29

Su un sito su cui sto lavorando ci sono numeri casuali che appaiono in modo molto semplice po 'di jQuery.

Invece di ciò che è destinato ad apparire, questi numeri - 48, ecc - appaiono all'inizio Come questo:

<script type="text/javascript"> 
    48 48document).ready(function() { 
    48 48".closed").click(function() {   
     48 48this).find("div.but").toggleClass('plus').toggleClass('minus');   
      48 48this).toggleClass('closed').toggleClass('open');  
     });  
    });   
</script> 

non posso nemmeno immaginare il motivo per cui avrebbe sputato questo fuori quando ho hard-coded in sito e non c'è. file esterno o altro

OK, quindi visto che è Perl ho bisogno di scappare $(, ma come? Ho dato un'occhiata alla documentazione di Perl e mi sono sentito come se fossi stato colpito.

Uso solo virgolette singole invece di virgolette doppie?

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.closed').click(function() {   
     $(this).find('div.but').toggleClass('plus').toggleClass('minus'); 
     $(this).toggleClass('closed').toggleClass('open');  
     }); 
    }); 
</script> 

Ecco lo script Perl completo. È l'intestazione di un sito.

########################### 
## META DATA AND HEADERS ## 
########################### 

$be_strict = 0; # 1 = 404 on page not found 
if ((!$title{$loadpage} || !$h1{$loadpage} || !$description{$loadpage} || !$keywords{$loadpage} || !$breadcrumb{$loadpage}) && $be_strict) { 
    print "Status: 302 Found\r\n" . 
     "Location: http://www.realots.co/404/\r\n" . 
     "\r\n"; 
    exit(0); 
} 

if ($action) { 

    ############################# 
    ## Highscore page SEO Hack ## 
    ############################# 

    if ($action eq "fish") { 
    $breadcrumb{'highscores'}  = "<a href='/'>RealOTS</a> &raquo; <a href='/highscores/'>Highscores</a> &raquo; <b>Fishing Skill</b>"; 
    $h1{'highscores'}    = "RealOTS Fishing Highscores"; 
    $title{'highscores'}   = "RealOTS Top Fishing Skill"; 
    $description{'highscores'} = "Fishing Skill Highscore list of our RealOTS. Check out these amazing fishermen!"; 
    $keywords{'highscores'}  = "realots,otserv,tibia,highscore,hiscores,fishing,top fishing"; 
    } 
    elsif ($action eq "ml") { 
    $breadcrumb{'highscores'}  = "<a href='/'>RealOTS</a> &raquo; <a href='/highscores/'>Highscores</a> &raquo; <b>Magic Level</b>"; 
    $h1{'highscores'}    = "RealOTS Magic Highscores"; 
    $title{'highscores'}   = "RealOTS Top Magic Level"; 
    $description{'highscores'} = "Magic Level Highscore list of our RealOTS. Check out these fearsome mages!"; 
    $keywords{'highscores'}  = "realots,otserv,tibia,highscore,hiscores,magic,top magic"; 
    } 
    elsif ($action eq "sword") { 
    $breadcrumb{'highscores'}  = "<a href='/'>RealOTS</a> &raquo; <a href='/highscores/'>Highscores</a> &raquo; <b>Sword Fighting</b>"; 
    $h1{'highscores'}    = "RealOTS Sword Fighting Highscores"; 
    $title{'highscores'}   = "RealOTS Top Sword Fighters"; 
    $description{'highscores'} = "Sword Fighting Highscore list of our RealOTS. Fear the mighty sword wielder!"; 
    $keywords{'highscores'}  = "realots,otserv,tibia,highscore,hiscores,sword,top sword"; 
    } 
    elsif ($action eq "axe") { 
    $breadcrumb{'highscores'}  = "<a href='/'>RealOTS</a> &raquo; <a href='/highscores/'>Highscores</a> &raquo; <b>Axe Fighting</b>"; 
    $h1{'highscores'}    = "RealOTS Axe Fighting Highscores"; 
    $title{'highscores'}   = "RealOTS Top Axe Fighters"; 
    $description{'highscores'} = "Axe Fighting Highscore list of our RealOTS. Behold these savage beasts with their amazing axe skills!"; 
    $keywords{'highscores'}  = "realots,otserv,tibia,highscore,hiscores,axe,top axe,axe fighting"; 
    } 
    elsif ($action eq "club") { 
    $breadcrumb{'highscores'}  = "<a href='/'>RealOTS</a> &raquo; <a href='/highscores/'>Highscores</a> &raquo; <b>Club Fighting</b>"; 
    $h1{'highscores'}    = "RealOTS Club Fighting Highscores"; 
    $title{'highscores'}   = "RealOTS Top Club Fighters"; 
    $description{'highscores'} = "Club Fighting Highscore list of our RealOTS. Caveman-like agility all around!"; 
    $keywords{'highscores'}  = "realots,otserv,tibia,highscore,hiscores,club,top club,club fighting"; 
    } 
    elsif ($action eq "dist") { 
    $breadcrumb{'highscores'}  = "<a href='/'>RealOTS</a> &raquo; <a href='/highscores/'>Highscores</a> &raquo; <b>Distance Fighting</b>"; 
    $h1{'highscores'}    = "RealOTS Distance Fighting Highscores"; 
    $title{'highscores'}   = "RealOTS Top Distance Fighters"; 
    $description{'highscores'} = "Distance Fighting Highscore list of our RealOTS. Death from afar, raining from the sky!"; 
    $keywords{'highscores'}  = "realots,otserv,tibia,highscore,hiscores,distance,top distance,distance fighting"; 
    } 
    elsif ($action eq "shield") { 
    $breadcrumb{'highscores'}  = "<a href='/'>RealOTS</a> &raquo; <a href='/highscores/'>Highscores</a> &raquo; <b>Shielding</b>"; 
    $h1{'highscores'}    = "RealOTS Shielding Highscores"; 
    $title{'highscores'}   = "RealOTS Top Shielding"; 
    $description{'highscores'} = "Shielding Highscore list of our RealOTS. These tanks are able to withstand tremendeous blows!"; 
    $keywords{'highscores'}  = "realots,otserv,tibia,highscore,hiscores,shielding,top shielding"; 
    } 
    elsif ($action eq "fist") { 
    $breadcrumb{'highscores'}  = "<a href='/'>RealOTS</a> &raquo; <a href='/highscores/'>Highscores</a> &raquo; <b>Fist Fighting</b>"; 
    $h1{'highscores'}    = "RealOTS Fist Fighting Highscores"; 
    $title{'highscores'}   = "RealOTS Top Fist Fighters"; 
    $description{'highscores'} = "Fist Fighting Highscore list of our RealOTS. They had special training by sensai Chuck Norris!"; 
    $keywords{'highscores'}  = "realots,otserv,tibia,highscore,hiscores,fist,top fist,fist fighting"; 
    } 
} 

#&print_header(); 
$web_content .= qq{ 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 

    <title>$title{$loadpage}</title> 
    <meta name="google-site-verification" content="Z97W94Kp7MlIOgiaMAYcFA4Lp4i5hckXdncRarXkBxk" /> 
    <meta name="google-site-verification" content="I5HTpL8jLRcdrWk3jD83qIFDBkS4G_rmWHlxEq94jLU" /> 
    <style type="text/css"> 
     table.outlined { 
     border-width: 1px; 
     order-style: solid; 
     border-color: #9999CC; 
     border-collapse: separate; 
     } 
     a.suggestions:visited{color:#0000FF;text-decoration:none;} 
     a.suggestions:link{color:#0000FF;text-decoration:none;} 
     a.suggestions:hover{color:#305997;text-decoration:none;} 

.trans { 
     filter:alpha(opacity=50); 
     -moz-opacity:0.5; 
     -khtml-opacity: 0.5; 
     opacity: 0.5; 
} 

    </style> 
<!--[if IE 6]> 
<![endif]--> 
<!--[if IE 6]> 
<style type="text/css"> 
html { overflow-y: hidden; } 
body { overflow-y: auto; } 
img#bg { position:absolute; z-index:-1; } 
#content { position:static; } 
</style> 
<![endif]--> 

}; 

if ($no_index{$loadpage}) { 
    $web_content .= qq{ <meta name="Robots" content="NOINDEX,NOFOLLOW,NOARCHIVE,NOSNIPPET" />}; 
} else { 
    $web_content .= qq{ <meta name="Robots" content="index,follow" />}; 
} 

$web_content .= qq{ 
    <meta name="keywords" content="$keywords{$loadpage}"> 
    <meta name="description" content="$description{$loadpage}"> 
    <meta name="author" content="RealOTS" /> 
    <meta name="Expires" content="never" /> 
    <link rel="stylesheet" type="text/css" href="/images/style.css" /> 
    <script type="text/javascript" src="http://www.mollie.nl/partners/js/96481.js"></script> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 


    <script type="text/javascript"> 
    $(document).ready(function() { 
    $(".closed").click(function() { 


     $(this).find("div.but").toggleClass('plus').toggleClass('minus'); 

     $(this).toggleClass('closed').toggleClass('open'); 

    }); 

}); 

    </script> 




    </head> 
}; 
+8

qualcuno sta sostituendo '$ (' 'con 48 48' –

+0

Avete codice lato server che elabora questo file – alex

+0

non so perché questo succede ma puoi provare jQuery (invece di $ (o viceversa – user1695032

risposta

46

$( è una variabile predefinita di Perl, in espansione per la lista ID del gruppo del processo.

Se siete su una macchina che supporta l'appartenenza a più gruppi contemporaneamente, fornisce un elenco separato da spazi di gruppi siete in. Il primo numero è quello restituito dalla getgid(), e le successive quelli per getgroups (), uno dei quali potrebbe essere uguale al primo numero.

Vedere i documenti perlvar per i dettagli.

Per evitare il problema, assicurarsi di fuggire $( (e qualsiasi altro JavaScript $ caratteri) in stringhe di Perl, o utilizzare '' invece di "" per evitare di interpolazione.

Bad:

$html = "$(document).ready(...)"; 

Buono:

$html = "\$(document).ready(...)"; 
$html = '$(document).ready(...)'; 

Nel codice di cui sopra, ad esempio, la sezione di script deve essere:

<script type="text/javascript"> 
    \$(document).ready(function() { 
    \$(".closed").click(function() { 

     \$(this).find("div.but").toggleClass('plus').toggleClass('minus'); 
     \$(this).toggleClass('closed').toggleClass('open'); 

    });  
    }); 
</script> 
+0

Non capisco, non codifico affatto perl, non so come scappare $ (, è letteralmente come parlare olandese a me. – andy

+0

Vedi sopra - posizionare un carattere \ prima che il '$' sia il modo più rapido per passare alle stringhe esistenti. Stai dicendo a Perl "questo è un '$' letterale qui, non trasformarlo in una variabile". Si potrebbe desiderare di postare la parte offendente del codice Perl (come una domanda separata), e ti aiuteremo a risolverlo. –

+0

Questo è tutto? Solo un \ prima del $? – andy

8

dal momento che si sta generando il codice tramite Perl, $( è un riservato uno in Perl. Mettilo in una variabile per dare una concatenazione di stringhe.

Documentazione

partire dal Perl 5.6, Perl nomi delle variabili possono essere stringhe alfanumeriche che iniziano con caratteri di controllo (o, meglio ancora, un accento circonflesso). Queste variabili devono essere scritte nel modulo $ {^ Foo}; le parentesi non sono opzionali. $ {^ Foo} indica la variabile scalare il cui nome è un controllo-F seguito da due o. Queste variabili sono riservate ai futuri usi speciali di Perl, ad eccezione di quelle che iniziano con^_ (control-underscore o caret-underscore). Nessun nome di controllo che inizia con^_ acquisirà un significato speciale in qualsiasi versione futura di Perl; tali nomi possono quindi essere utilizzati in modo sicuro nei programmi. $^_ stesso, tuttavia, è riservato.

Soluzione

utilizzare uno di questi:

"\$(document).ready(...)"; 
'$(document).ready(...)'; 
+0

Non ho mai scritto perl prima! Non ho idea di come farlo, ho pensato che potevo semplicemente modificare le cose in testa senza scherzare con lo script perl. – andy

+0

@zerkms lol che mi ha fatto ridere mentre lo guardavo in azione. – Jace

12

Oltre a Il suggerimento di fuga di Paul ioni sopra, preferisco usare il metodo di quoting alternativo che hai usato sopra, quindi non devo sfuggire ad ogni stringa e citare nel mio Javascript. Racchiudere una stringa in q {} ti salverà dal dover sfuggire ogni segno di dollaro. Finché non avrai bisogno di interpolazione in quel blocco starai bene!

Così il vostro codice potrebbe essere scritto come:?

$web_content .= q{ 
    <script type="text/javascript"> 
    $(document).ready(function() { 
     $(".closed").click(function() { 


      $(this).find("div.but").toggleClass('plus').toggleClass('minus'); 

      $(this).toggleClass('closed').toggleClass('open'); 

     }); 

    }); 

    </script> 
}; 
+2

Oppure usa un heredoc non interpolatore: '$ web_content. = << 'SCRIPT';' – Zaid

Problemi correlati