Perl で生成された JavaScript コードで "$(" の代わりに数字が表示される 質問する

Perl で生成された JavaScript コードで

私が取り組んでいるサイトでは、非常に単純な 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>

サイトにハードコードしていて、外部ファイルも何もないのに、なぜこれが出力されるのか想像もつきません。

わかりました。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>

完全な 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>
};

ベストアンサー1

$(は Perl の定義済み変数であり、プロセスのグループ ID リストに展開されます。

複数のグループへの同時参加をサポートしているマシンを使用している場合は、スペースで区切られた、参加しているグループのリストが提供されます。最初の番号は getgid() によって返される番号で、後続の番号は getgroups() によって返され、そのうちの 1 つは最初の番号と同じになる場合があります。

を参照してくださいパールヴァー詳細についてはドキュメントを参照してください。

この問題を回避するには、Perl 文字列で$((およびその他の JavaScript文字) をエスケープするか、または の代わりにを使用して補間を回避してください。$''""

悪い:

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

良い:

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

たとえば、上記のコードでは、スクリプト セクションは次のようになります。

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

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

    });    
  });
</script>

おすすめ記事