Perl生成的JavaScript代码中出现的数字而不是"$("

and*_*ndy 30 javascript perl jquery

在我正在研究的网站上,随机数字出现在一个非常简单的jQuery中.

而不是出现什么意思,这些数字  48等等出现在开头.像这样:

<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>
Run Code Online (Sandbox Code Playgroud)

我甚至无法想象为什么当我将其硬编码到网站中并且没有外部文件或任何东西时它会吐出来.

好的,所以既然它是Perl我需要逃脱$(,但是怎么样?我看了一下Perl文档,我觉得自己被打了一拳.

我只使用单引号而不是双引号吗?

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

这是完整的Perl脚本.这是一个网站的标题.

###########################
## 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>
};
Run Code Online (Sandbox Code Playgroud)

Pau*_*oub 45

$( 是一个Perl预定义变量,扩展到进程的组ID列表.

如果您在同时支持多个组成员身份的计算机上,则给出一个空格分隔的组列表.第一个数字是getgid()返回的数字,后续数字是getgroups(),其中一个可能是与第一个数字相同.

有关详细信息,请参阅perlvar文档.

要避免此问题,请确保在Perl字符串中转义$((以及任何其他JavaScript $字符),或使用''而不是""避免插值.

坏:

$html = "$(document).ready(...)";
Run Code Online (Sandbox Code Playgroud)

好:

$html = "\$(document).ready(...)";
$html = '$(document).ready(...)';
Run Code Online (Sandbox Code Playgroud)

例如,在上面的代码中,脚本部分应该是:

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

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

    });    
  });
</script>
Run Code Online (Sandbox Code Playgroud)


joa*_*tis 12

除了Paul上面提到的转义建议之外,我更喜欢使用您在上面使用的备用引用方法,因此我不必在我的Javascript中转义每个字符串并引用.在q {}中包含一个字符串将使您不必逃避每一个美元符号.只要您不需要在该块中进行插值,您就可以了!

所以你的代码可以写成:

$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>
};
Run Code Online (Sandbox Code Playgroud)

  • 或者使用非插值heredoc:`$ web_content.= <<'SCRIPT';` (2认同)

Pra*_*man 8

因为你是通过Perl生成代码的,$(所以在Perl中是一个保留的代码.将它放在一个变量中,给出一个字符串连接.

文档

从Perl 5.6开始,Perl变量名可能是以控制字符开头的字母数字字符串(或者更好的是插入符号).这些变量必须以$ {^ Foo}的形式写出; 大括号不是可选的.$ {^ Foo}表示标量变量,其名称为control-F,后跟两个o.这些变量保留给Perl以后的特殊用途,但以^ _(控制下划线或插入符号 - 下划线)开头的变量除外.没有以^ _开头的控制字符名称将在任何未来的Perl版本中获得特殊含义; 因此,这些名称可以安全地用于程序中.但是,$ ^ _本身是保留的.

使用以下任何一种:

"\$(document).ready(...)";
'$(document).ready(...)';
Run Code Online (Sandbox Code Playgroud)