Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP网站内容中过滤javascript_Javascript_Php_Jquery_Html_Keyword - Fatal编程技术网

从PHP网站内容中过滤javascript

从PHP网站内容中过滤javascript,javascript,php,jquery,html,keyword,Javascript,Php,Jquery,Html,Keyword,因此,我正在制作一个脚本,根据用户提交的URL检查页面的关键字密度,我一直在使用strip_标记,但它似乎没有从站点上的实际单词内容中完全过滤javascript和其他代码。是否有更好的方法在页面上的代码内容和实际单词内容之间进行过滤 if(isset($_POST['url'])){ $url = $_POST['url']; $str = strip_tags(file_get_contents($url)); $words = str_word_count(strtolower(

因此,我正在制作一个脚本,根据用户提交的URL检查页面的关键字密度,我一直在使用strip_标记,但它似乎没有从站点上的实际单词内容中完全过滤javascript和其他代码。是否有更好的方法在页面上的代码内容和实际单词内容之间进行过滤

if(isset($_POST['url'])){
$url = $_POST['url'];
$str = strip_tags(file_get_contents($url));
$words      = str_word_count(strtolower($str),1);
$word_count = array_count_values($words);

foreach ($word_count as $key=>$val) {
    $density = ($val/count($words))*100;
        echo "$key - COUNT: $val, DENSITY: ".number_format($density,2)."%<br/>\n";
}
}
if(isset($\u POST['url'])){
$url=$_POST['url'];
$str=strip_标记(文件获取内容($url));
$words=str\u word\u计数(strtolower($str),1);
$word\u count=数组\u count\u值($words);
foreach($word_计为$key=>$val){
$density=($val/count($words))*100;
echo“$key-COUNT:$val,DENSITY:”.number_格式($DENSITY,2)。“%
\n”; } }
我为此编写了两个函数:

/**
 * Removes all Tags provided from an Html string
 *
 * @param string   $str    The Html String
 * @param string[] $tagArr An Array with all Tag Names to be removed
 *
 * @return string The Html String without the tags
 */
function removeTags($str, $tagArr)
{
    foreach ($tagArr as $tag) {
        $str = preg_replace('#<' . $tag . '(.*?)>(.*?)</' . $tag . '>#is', '', $str);
    }
    return $str;
}

/**
 * cleans some html string
 *
 * @param string $str some html string
 *
 * @return string the cleaned string
 */
function filterHtml($str)
{
    //Remove Tags
    $str = removeTags($str, ['script', 'style']);

    //Remove all Tags, but not the Content
    $str = preg_replace('/<[^>]*>/', ' ', $str);

    //Remove Linebreaks and Tabs
    $str = str_replace(["\n", "\t", "\r"], ' ', $str);

    //Remove Double Whitespace
    while (strpos($str, '  ') !== false) {
        $str = str_replace('  ', ' ', $str);
    }

    //Return trimmed
    return trim($str);
}

您需要的是解析HTML,这样您就有了一个类似DOM的结构,可以迭代并访问不同节点的内容


你可以使用

什么不是剥离?gettime-COUNT:1,DENSITY:0.06%event-COUNT:1,DENSITY:0.06%js'-COUNT:1,DENSITY:0.06%var-COUNT:2,DENSITY:0.12%f-COUNT:3,DENSITY:0.18%getelementsbytagname-COUNT:1,DENSITY:0.06%^一些不应该在其中的示例这些不是标记,这些是标签之间的Javascript的一部分。那么我如何才能从字符串中剥离Javascript?仍然是空白的白屏,不确定是什么问题is@mako我改进了这个方法,不显示脚本标记,也不需要空白。我还添加了一个工作示例。请验证,如果您使用您的代码,那么您的代码是否真的被调用了。似乎去掉了我使用过的大部分javascriptseeing@mako,自从您更新了问题之后,我提供了第二个功能,它可以通过黑名单删除每个想要的标签和内容。
$fileContent     = file_get_contents('http://stackoverflow.com/questions/25537377/filtering-html-from-site-content-php');
$filteredContent = filterHtml($fileContent);
var_dump($filteredContent);