【问题标题】:php regex to change the value html attributephp正则表达式更改值html属性
【发布时间】:2015-11-28 11:34:13
【问题描述】:

我有一个 iframe 的 html 字符串,其中包含宽度和它的值。我想用 php 中的正则表达式替换宽度的值。例如,我动态地获取一个值

<iframe width="560" height="315" src="" frameborder="0" allowfullscreen></iframe>

我想通过正则表达式改变宽度的值。你能帮帮我吗?

【问题讨论】:

标签: php html regex


【解决方案1】:

避免在 XML/HTML 文档中使用 RegEx,有一个高性能库可以做到这一点,除非有非常非常好的理由

尝试使用此代码完成您的工作

<?php
    $html       = '<iframe width="560" height="315" src="" frameborder="0" allowfullscreen></iframe>';
    $doc        = new DOMDocument();
    $doc->loadHTML($html);
    $elements   = $doc->getElementsByTagName('iframe');

    foreach($elements as $el) {
        $el->setAttribute('width', '1024');
    }
    print $doc->saveHTML();

输出

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><iframe width="1024" height="315" src="" frameborder="0" allowfullscreen></iframe></body></html>     

【讨论】:

  • 据我所知,他不想添加 !DOCTYPE html public~~ 东西,他只想要 iframe 代码。尝试: print $doc->saveHTML($doc->getElementsByTagName ('iframe')->item(0));
  • 你也可以使用$doc-&gt;loadHTML($html, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);来防止自动添加doctype和html、head标签。
  • 这是一个很棒的解决方案人。它直接工作。不幸的是,我对这项技术有很多知识。谢谢
【解决方案2】:

听起来是个非常糟糕的主意,但这里有……类似

<?php
header('content-type:text/plain;charset=utf8');
$str=base64_decode('PGlmcmFtZSB3aWR0aD0iNTYwIiBoZWlnaHQ9IjMxNSIgc3JjPSIiIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+');
$ret=preg_replace('/(\<iframe.*?width\=)\"(.*?)\"/','${1}"999"',$str);
var_dump($str,$ret);

会将宽度更改为 999...但您应该真正使用适当的 HTML 解析器,例如 DOMDocument。

$domd=@DOMDocument::loadHTML($str);
$domd->getElementsByTagName('iframe')->item(0)->setAttribute('width',999);
echo $domd->saveHTML($domd->getElementsByTagName('iframe')->item(0));

还将宽度更改为 999,并且更加可靠(例如,如果宽度和 = 之间有空格或换行符,正则表达式将中断,尽管它仍然是合法的 html.. 叹息)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2011-02-01
    • 2010-11-24
    相关资源
    最近更新 更多