如何在PHP文件中计算JavaScript代码的行数?

5

我需要统计php文件中script标签之间的行内JavaScript代码行数。我该怎么做?grep linux命令足够吗,还是我需要使用一些工具来完成?请帮忙。


你打算如何计算<script type="text/javascript">alert('hello');</script><script type="text/javascript">\nalert('hello');\n</script> - bcosca
如果我可以使用grep、wc和awk从命令行完成它,那就太好了。我需要一个报告,像这样:index.php 40 about.php 5040和50是内联JavaScript的行数。 - Geshan
3个回答

3

您可以使用正则表达式来提取文件中每个SCRIPT标签的内容,然后计算内容中\n出现的次数。

以下正则表达式应该可以匹配所有的script标签,包括开头和结尾标签:

 /<script[^>]*?>(.*)?</script>/sm

您需要先删除没有任何代码的标签和行,然后再计算JavaScript代码的实际行数。

alert('</script>'); 这个怎么办? - hsz
为什么这样的代码行有任何意义呢?为什么不给我一个好的例子来说明我的代码失败了,比如echo '</'.'script'.'>'; :) 无论它匹配得有多好,你总能找到一个会破坏匹配的字符串。但我认为一个基本的想法就足够了。 - 2ndkauboy
我该如何在grep中使用它,你能给一个例子吗? - Geshan
很抱歉,我不是Linux用户,也不太清楚如何使用grep来做这件事。但我认为你不能只用一个grep命令完成它,因为你需要计算正则表达式匹配的换行符数量。 - 2ndkauboy

0
请查看以下代码,它可以工作,但您可能需要根据自己的要求进行更新。
<?php
$file = file('thisfile.php');
for($i=0;$i<count($file);$i++)
{
    if(trim($file[$i]) == "<script language=\"javascript\">")
    {
        $start = $i.'<br>';
    }
    if(trim($file[$i]) == "</script>")
    {
        $end = $i.'<br>';
    }

}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript">
var a = 10;
var b = 10;
var c = 10;
var d = 10;
var e = 10;
var e = 10;
</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php echo ($end - $start)-1; ?>
</body>
</html>

将此 PHP 文件保存为 thisfile.php,然后尝试。
祝您有美好的一天。

0

如果你需要从处理过的 HTML 页面中执行此操作,请使用 DOM 获取所有没有 src 属性的脚本标签。然后对于每个找到的节点,通过换行符拆分子 TextNode 或简单地计数它们。

如果你需要从实际的 PHP 源代码中抓取这个信息,使用 Tokenizer 查找 T_STRINGS 和类似的解析器标记 并分析它们的 <script> 块,但请注意,如果存在以下代码,则可能无法找到它们全部:

 echo '<' . $scriptTag . '>' . $code . '</' . $scriptTag . '>';

因为在 PHP 处理之前,它不能被解析为 JavaScript 字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接