作者共发了7篇帖子。 字体大小:较小 - 100% (默认)▼  内容转换:不转换▼
 
点击 回复
717 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=
一派护法 十九级
8楼 发表于:2017-5-18 23:02
回复7楼 @dadada_xiao 的内容:
我都不知道有这个东西。。
类似于jQuery的东西,只不过是在服务器端使用。

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:717 回复数:7
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2017-5-18 23:02
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。