相关疑难解决方法(0)

除了XHTML自包含标记之外,RegEx匹配开放标记

我需要匹配所有这些开始标记:

<p>
<a href="foo">
Run Code Online (Sandbox Code Playgroud)

但不是这些:

<br />
<hr class="foo" />
Run Code Online (Sandbox Code Playgroud)

我想出了这个,并希望确保我做对了.我只抓住了a-z.

<([a-z]+) *[^/]*?>
Run Code Online (Sandbox Code Playgroud)

我相信它说:

  • 找一个小于,然后
  • 然后,查找(并捕获)az一次或多次
  • 然后找到零个或多个空格
  • 找到任何字符零次或多次,贪婪/,然后
  • 找到一个大于

我有这个权利吗?更重要的是,你怎么看?

html regex xhtml

1323
推荐指数
36
解决办法
270万
查看次数

您能否举例说明为什么用正则表达式解析XML和HTML很困难?

一个错误我看到人们做,并再次试图解析XML或HTML用正则表达式.以下是解析XML和HTML很难的几个原因:

人们希望将文件视为一系列行,但这是有效的:

<tag
attr="5"
/>
Run Code Online (Sandbox Code Playgroud)

人们希望将<或<tag视为标记的开头,但是这样的东西存在于野外:

<img src="imgtag.gif" alt="<img>" />
Run Code Online (Sandbox Code Playgroud)

人们通常希望将起始标记与结束标记匹配,但XML和HTML允许标记包含自身(传统的正则表达式根本无法处理):

<span id="outer"><span id="inner">foo</span></span> 
Run Code Online (Sandbox Code Playgroud)

人们通常希望匹配文档的内容(例如着名的"查找给定页面上的所有电话号码"问题),但数据可能会被标记(即使在查看时看起来是正常的):

<span class="phonenum">(<span class="area code">703</span>)
<span class="prefix">348</span>-<span class="linenum">3020</span></span>
Run Code Online (Sandbox Code Playgroud)

评论可能包含格式不正确或不完整的标记:

<a href="foo">foo</a>
<!-- FIXME:
    <a href="
-->
<a href="bar">bar</a>
Run Code Online (Sandbox Code Playgroud)

你还知道其他什么问题?

html regex xml

397
推荐指数
10
解决办法
4万
查看次数

DOMDocument从HTML源中删除脚本标记

在这里使用@Alex的方法使用内置的DOMDocument从HTML文档中删除脚本标记.问题是,如果我有一个带有Javascript内容的脚本标记,然后是另一个链接到外部Javascript源文件的脚本标记,则不会从HTML中删除所有脚本标记.

$result = '
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>
            hey
        </title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script>
            alert("hello");
        </script>
    </head>
    <body>hey</body>
</html>
';

$dom = new DOMDocument();
if($dom->loadHTML($result))
{
    $script_tags = $dom->getElementsByTagName('script');

    $length = $script_tags->length;

    for ($i = 0; $i < $length; $i++) {
        if(is_object($script_tags->item($i)->parentNode)) {
            $script_tags->item($i)->parentNode->removeChild($script_tags->item($i));
        }
    }

    echo $dom->saveHTML();
}
Run Code Online (Sandbox Code Playgroud)

以上代码输出:

<html>
    <head>
        <meta charset="utf-8">
        <title>hey</title>
        <script>
        alert("hello");
        </script>
    </head>
    <body>
        hey
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

从输出中可以看出,只删除了外部脚本标记.有什么办法可以确保删除所有脚本标记吗?

php xss script-tag html-parsing domdocument

12
推荐指数
2
解决办法
9593
查看次数

php DomDocument添加了额外的标签

我正在尝试解析文档并获取所有图像标记并更改不同内容的来源.


    $domDocument = new DOMDocument();

    $domDocument->loadHTML($text);

    $imageNodeList = $domDocument->getElementsByTagName('img');

    foreach ($imageNodeList as $Image) {
      $Image->setAttribute('src', 'lalala');
      $domDocument->saveHTML($Image);
    }

    $text = $domDocument->saveHTML();

$ text最初看起来像这样:


<p>Hi, this is a test, here is an image<img src="http://mysite.com/beer.jpg" width="60" height="95" /> Because I like Beer!</p>

Run Code Online (Sandbox Code Playgroud)

这是输出$ text:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Hi, this is a test, here is an image<img src="lalala" width="68" height="95"> Because I like Beer!</p></body></html>

Run Code Online (Sandbox Code Playgroud)

我得到了一堆我不需要的额外标签(html,正文和顶部的评论).有没有办法设置DOMDocument以避免添加这些额外的标签?

谢谢!

php dom domdocument

9
推荐指数
2
解决办法
2695
查看次数

如何使用正则表达式删除其类的整个HTML标记(及其内容)?

我对Regex不是很好,但我正在学习.

我想通过类名删除一些html标记.这是我到目前为止:

<div class="footer".*?>(.*?)</div>
Run Code Online (Sandbox Code Playgroud)

首先 .*?是因为它可能包含其他属性,第二个可能包含其他html内容.

我究竟做错了什么?我试了很多但没有成功.

更新

在DIV内部,它可以包含多行,我正在玩Perl正则表达式.

html regex perl filter

7
推荐指数
2
解决办法
7809
查看次数

用于从字符串中删除给定(x)HTML标记的正则表达式

假设我有一个包含大量文本和(x)HTML标记的字符串.我想删除给定标记的所有实例(以及该标记的任何属性),保留所有其他标记和文本.完成这项工作的最佳正则表达方式是什么?

编辑添加:哦,我很欣赏使用正则表达式来解决这个问题并不是最好的解决方案.但是,为了便于讨论,我们可以假设这个特定的技术决策比我的工资等级高出一些水平吗?;)

html regex string

6
推荐指数
2
解决办法
7775
查看次数

strip_tags禁止使用某些标签

根据strip_tags文档,第二个参数采用允许的标记.但在我的情况下,我想反过来.假设我接受script_tags正常(默认)接受的<script>标签,但只剥离标签.有什么办法吗?

我并不是指有人为我编码,而是非常感谢如何实现这一点(如果可能的话)的可能方式的输入.

html php strip-tags

6
推荐指数
1
解决办法
4962
查看次数

如何在不丢失HTML和删除JS/SQL的情况下清理字符串

我使用富文本编辑器接受来自客户端的HTML内容的输入数据.

在服务器端,我使用基于PHP的服务器并清理传入的数据.

是否有内置的PHP功能,它保留HTML代码并删除Javascript for XSS + SQL注入代码的存在.

php sanitization rich-text-editor input-sanitization

4
推荐指数
2
解决办法
4478
查看次数

strip_tags,删除 javascript

我现在运行的代码有这个问题。

我的代码是输入一个 URL,当我单击“提交”时,它会删除所有标签。我用strip_tags那个。然后我使用preg_match_all("/((?:\w'|\w|-)+)/", $contents, $words);它创建每个单词的数组。然后我有一个 foreach 循环,它将计算所有单词,然后将其与另一个 foreach 循环一起放入表中。

问题是例如。假设我输入一个包含以下内容的 URL:

<html>
    <head>
        <title>titel1</title>
    </head>
    <body>
        <div id="div1">
            <h1 class="class2">
                Testpage-h1
            </h1>
            <p>
                Testpage-p
            </p>
        </div>
        <script>
            alert('hallo');
            document.getElementById('class2');
        </script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这将使用我的代码回显以下内容:

document         1
getElementById1  1
class2'          1
hallo            1
alert            1
Testpage-h1      1
Testpage-p       1
titel1           1
Run Code Online (Sandbox Code Playgroud)

(抱歉将其作为“代码”放置,但它不允许我使用分隔符,或者将数字放在彼此下方)

我的问题是它不应该显示标签之间的内容<script></script>,因为无论如何这对我来说没有用。这个问题有解决办法吗?

我已经尝试过诸如清理过滤之类的事情,但这对我没有帮助。

php strip-tags

1
推荐指数
1
解决办法
6411
查看次数

如何输出HTML但防止XSS攻击

我写了一个PHP脚本来获取电子邮件内容.

这些内容是HTML格式.

我想显示内容,如下所示

<?php 
$email_content = '
    <html>
        <script>alert("XSS");</script>
        <body>
            <div>Line1</div>
            <div>Line2</div>
        </body>
    </html>
';
echo $email_content;
?>
Run Code Online (Sandbox Code Playgroud)

如您所见,它将导致XSS攻击.但是如果我使用htmlspecialchars函数,它将无法显示正确的HTML格式,在这种情况下我该怎么做?谢谢.

php xss

0
推荐指数
1
解决办法
954
查看次数