目前共有8篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:大陆简体▼
 
點擊 回復
904 7
[示例]phpQuery过滤表单中的HTML内容
一派掌門 二十級
1樓 發表于:2015-2-26 13:59
<?php
include 'phpQuery-onefile.php';
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>DOM</title>
</head>
 
<body>
<?php  
$html = '<div class="float_right image_list"><a href="#" onclick="reply(3);return false" onmouseover="hover(this,true,\'reply_icon\')" onmouseout="hover(this,false,\'reply_icon\')"><img src="/images/system/null.gif" class="reply_icon" />回复</a><a href="post.php?t=21678&p=1&action=del&floor=3" onclick="del_post(this,3);return false"><img src="/images/icon/edit_trash.png" class="size_16_2" />删除</a><a href="#" onclick="lock_user(80587);return false"><img src="/images/icon/lock.png" class="size_16_2" />封禁</a><span id="FAVOURITE_80587"><a href="#" onclick="collect_post(80587);return false"><img src="/images/icon/favorites.png" class="size_16_2" />收藏</a></span></div><a href="http://zh.arslanbar.net/" onclick="alert(\'Are you a pig?\');">首页</a>';

$doc = phpQuery::newDocumentHTML($html);
foreach ($doc["a"] as $a) {
    $a = pq($a);
    echo $a->text() . " ";
    echo $a->attr("onclick") . " ";
    
    $text = $a->text();
    if ($text == "封禁") {
         $a->text("封你妈");
    }
    
    // Remove dangerous attributes on each link
    $a->removeAttr("onclick")->removeAttr("onmouseover")->removeAttr("onmouseout");
    if ($a->attr("href") == "#") {
        $a->attr("href", "index.php"); // do not allow href to be '#'
    }
    $a->attr("target", "_blank"); // force all links to be opened in a new window
    
    // Take out the images inside links
    // <a><img />something<a> => <img/><a>something</a>
    $img = $a["img"]->remove();
    $a->before($img);
}
$doc["img"]->removeAttr("class");
$doc["div"]->removeAttr("class");

// remove <span> but keep its content
foreach ($doc["span"] as $span) {
    $span = pq($span);
    $span->after($span->html());
    $span->remove();
}

// change <div> to <p>
/*foreach ($doc["div"] as $div) {
    $div = pq($div);
    $div->after("<p>" . $div->html() . "</p>");
    $div->remove();
}*/

echo "<hr>";
$result = $doc->html();
echo htmlspecialchars($result);
?>
</body>
</html>
一派掌門 二十級
2樓 發表于:2015-2-26 14:00
网页输出内容:
回复 reply(3);return false 删除 del_post(this,3);return false 封禁 lock_user(80587);return false 收藏 collect_post(80587);return false 首页 alert('Are you a pig?');
——————————————————————————————————————————
 <div> <img src="/images/system/null.gif"><a href="index.php" target="_blank">回复</a><img src="/images/icon/edit_trash.png"><a href="post.php?t=21678&amp;p=1&amp;action=del&amp;floor=3" target="_blank">删除</a><a href="index.php" target="_blank">封你妈</a> <img src="/images/icon/favorites.png"><a href="index.php" target="_blank">收藏</a> </div> <a href="http://zh.arslanbar.net/" target="_blank">首页</a>
 
一派掌門 二十級
3樓 發表于:2015-2-26 14:03
在该例子中,php服务器端程序删除了表单内容中html内容的javascript事件,css样式,删除了span标签而保留其内容,把所有的超级链接设置为新窗口打开,超级链接地址不允许只有#。
把上述内容放在服务器端处理比直接用jQuery在客户端处理好得多,可以防止恶意用户通过post数据包绕开javascript过滤而发送破坏页面内容的html代码。
 
一派掌門 二十級
4樓 發表于:2015-2-26 14:07
echo "<hr>";
$html2 = '<div ONCLICK="alert(1+1>=2);">Haha, I am not complete<span';
$doc2 = phpQuery::newDocumentHTML($html2);
$result2 = $doc2->html();
echo htmlspecialchars($result2);

jQuery还可以帮助修复不完整的html片段。
以上程序输出内容为:
<div onclick="alert(1+1&gt;=2);">Haha, I am not complete<span></span> </div>
 
一派掌門 二十級
5樓 發表于:2015-2-26 14:13
回复:4楼
当然,还可以进一步过滤:
echo "<hr>";
$html2 = '<div ONCLICK="alert(1+1>=2);">Haha, I am not complete<span';
$doc2 = phpQuery::newDocumentHTML($html2);
$doc2["*"]->removeAttr("onclick"); //删除所有标签的onclick属性
$doc2["span"]->remove();
$result2 = $doc2->html();
echo htmlspecialchars($result2);

过滤结果:
<div>Haha, I am not complete</div>
 
一派掌門 二十級
6樓 發表于:2015-2-26 14:15
和jquery.js一样,phpQuery也只需要装入一个文件就行了:
<?php
include 'phpQuery-onefile.php';
?>
该文件的下载地址是:
https://code.google.com/p/phpquery/downloads/detail?name=phpQuery-0.9.5.386-onefile.zip&can=2&q=
 
魔法學徒 一級
7樓 發表于:2017-5-18 18:37
我都不知道有这个东西。。
 
一派掌門 二十級
8樓 發表于:2017-5-18 23:02
回復7樓 @dadada_xiao 的內容:
我都不知道有这个东西。。
类似于jQuery的东西,只不过是在服务器端使用。
 

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:904 回複數:7
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2017-5-18 23:02
 
©2010-2025 Purasbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。