【问题标题】:Remove class that match pattern with php [duplicate]删除与 php 匹配模式的类 [重复]
【发布时间】:2013-11-08 07:14:12
【问题描述】:

当类匹配某些模式(假设以something-开头)时,如何从整个html字符串(很多元素)中删除所有类

所以

输入

<div class="something-first">
    <div class="something-child something-good another something-great">
    </div>
</div>

会变成

<div class="">
    <div class="another">
    </div>
</div>

我需要在服务器端做,所以它需要 php。

【问题讨论】:

标签: php html regex


【解决方案1】:

使用 DOM 操作:

$html = '<div class="something-first">
    <div class="something-child something-good another something-great">
    </div>
</div>';

$domDoc = new DOMDocument();
$domDoc->loadHTML($html);
$xpath = new DOMXPath($domDoc);

$nodes = $xpath->query('//*[starts-with(@class, "something-")]');

foreach($nodes as $n) {
    $classes = preg_split('/\s+/',$n->getAttribute('class'));

    $newClasses = array();

    foreach($classes as $class) {
        if(strpos($class, 'something-') === 0)
            continue;

        $newClasses[] = $class;
    }

    $n->setAttribute('class', implode(' ', $newClasses));
}


$newHtml = '';

foreach($xpath->query('//body/*') as $node) {
    $newHtml .= $domDoc->saveHTML($node);
}

var_dump(htmlentities($newHtml));

【讨论】:

    【解决方案2】:
    <?php
    $file = fopen("<filename>", "w+");
    $words = array();
    $new = array();
    $filecontents = file_get_contents('<filename>');
    $words = preg_split('/[\s]+/', $filecontents, -1, PREG_SPLIT_NO_EMPTY);
    $i=0;
      foreach($words as $word) {
         if(substr($word[0],0,11) == '"something-" or substr($word[0],0,10) == 'something-") {
         $new[] = "";
         } else {
           $new[] = $word;
           }
       $i++; 
       }
    fwrite($file,$new)
    ?>
    

    【讨论】:

    • Euhm,你能检查一下你的代码吗?你在混淆引号
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2013-10-09
    • 2014-07-27
    • 1970-01-01
    • 2020-02-18
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多