将包含特定类的 <p> 标签替换为其原始可见文本

问题描述 投票:0回答:5

我正在尝试使用

preg_replace()
删除一段代码,但我在使其正常工作时遇到问题。

代码示例:

$str = '<p class="code">some string here</p>';

我正在使用PHP:

$pattern = array();
$pattern[0] = '!<p class="code">!';
$pattern[1] = '!</p>!';
preg_replace($pattern,"", $str);

这会按照我想要的方式删除代码,除了 p 和 class 之间的空格之外。

退货:

  some string here //notice the single space at the beginning.

我正在努力获得:

some string here //no space at the beginning.

我尝试将其分成一大块而不是将

preg_replace()
分解成碎片的原因是因为我不想更改标签之间字符串中可能存在的任何内容。

php html-parsing preg-replace strip-tags
5个回答
1
投票

这不会发生在我身上(也不应该)。

可能是其他地方输出的空格(使用

var_dump()
查看字符串)。


0
投票

您可能想查看此线程,看看是否要切换到使用 DOMDocument。它会帮你省去很多试图解析 HTML 的麻烦。

强大且成熟的 PHP HTML 解析器


0
投票

测试:

<?php
$str = '<p class="code">some string here</p>';

$pattern = array();
$pattern[0] = '!<p class="code">!';
$pattern[1] = '!</p>!';
$result = preg_replace($pattern,"", $str);
var_dump($result);

结果:

php pregrep.php                                                                  
string(16) "some string here"

看起来效果很好。


0
投票

亚历克斯,我弄清楚了我在哪里获得了额外的空间。

我将该代码放入这样的文本区域中:

$str = '<p class="code">some string here</p>';
$pattern = array();
$pattern[0] = '!<p class="code">!';
$pattern[1] = '!</p>!';
$strip_str = preg_replace($pattern,"", $str);


<textarea id="code_area" class="syntaxhl" name="code" cols="66" rows="5">
 <?php echo $strip_str; ?>
</textarea>

这给了我额外的空间,但是当我将代码更改为:

<textarea id="code_area" class="syntaxhl" name="code" cols="66" rows="5"><?php echo $strip_str; ?></textarea>

没有行空格或中断,多余的空格消失了。


0
投票

为什么不使用

trim()

$text = trim($text);

这会删除字符串周围的空格。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.