繁体   English   中英

用 PHP 中的空字符串替换字符串中的 html 代码

[英]Replace html code in a string with empty string in PHP

自从上一次我的 PHP 就像 2016 年或 2017 年一样,我已经有 4-5 年没有做过 PHP 编程了。我在这个非常简单的问题上遇到了麻烦。

我有这个字符串。 现在请注意不要删除一个空格,因为它非常重要。

$s = 'Congratulations, you completed the quiz!
<h2>{{result-title}}</h2>
{{result-text}}

You achieved {{points}} points from {{questions}} questions.\n\n
        <div class="chained-quiz-email">
                <form method="POST">
                <p><label>Your email address:</label> <input type="email" name="chained_email_844640736"
                
                id="chainedUserEmail" class="chained-quiz-email " required></p>
    
     <input type="submit" id="submit-email" value="Submit" name="submit-email-btn844640736">
     </form>
            
            
            </div>
        
        ';

现在我只想删除这部分 html 代码。

    <div class="chained-quiz-email">
            <form method="POST">
            <p><label>Your email address:</label> <input type="email" name="chained_email_844640736"
            
            id="chainedUserEmail" class="chained-quiz-email " required></p>

 <input type="submit" id="submit-email" value="Submit" name="submit-email-btn844640736">
 </form>
        
        
        </div>

output就像:

Congratulations, you completed the quiz!
<h2>{{result-title}}</h2>
{{result-text}}

You achieved {{points}} points from {{questions}} questions.

我正在考虑用正则表达式来做,因为我认为它可能非常有用。 我想出了这种模式,但似乎仍然不起作用$pattern = '/<div class="chained-quiz-email">.*?</div>/i'; 我得到一个空字符串的返回。 有人可以帮我弄这个吗。 我很感激!

您可以使用内置的 php function strip_tags()。

<?php
$s = 'Congratulations, you completed the quiz!
<h2>{{result-title}}</h2>
{{result-text}}

You achieved {{points}} points from {{questions}} questions.\n\n
        <div class="chained-quiz-email">
                <form method="POST">
                <p><label>Your email address:</label> <input type="email" name="chained_email_844640736"
                
                id="chainedUserEmail" class="chained-quiz-email " required></p>
    
     <input type="submit" id="submit-email" value="Submit" name="submit-email-btn844640736">
     </form>
            
            
            </div>
        
        ';
        
echo '<pre>';
echo strip_tags( $s,'<h2>');
echo '</pre>';
$regex = '#\<div class="chained-quiz-email"\>(.+?)\<\/div\>#s';
preg_match($regex, $s, $matches);
var_dump($matches[0]);

只是在正则表达式上添加了一些配置。

$pattern = '/<div class="chained-quiz-email">.*?</div>/i';

将其更改为:

$pattern = '/<div class="chained-quiz-email">.*?<\/div>/is';

说明你可以看这里

也是一个对正则表达式进行试验的非常有用的网站

感谢@CBroe 和@Lawrence( 这里有另一个替代解决方案)

使用domdocument class

<?php
$doc = new DOMDocument; 
$doc->loadHTML($s);

$thedocument = $doc->documentElement;

$selector = new DOMXPath($doc);
foreach($selector->query('//div[contains(attribute::class, "chained-quiz-email")]') as $e ) {
    // Select all child node
    $e->parentNode->removeChild($e);
}

echo $doc->saveHTML($thedocument);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM