【问题标题】:how to insert in x amount of paragraph with str_replace () [closed]如何用str_replace()插入x段的段落[关闭]
【发布时间】:2019-12-06 19:53:17
【问题描述】:

我正在尝试插入一个带有str_replace ()的元素,计算内容中的段落数,例如:

<?php
$result_information = "<p>parrafo 1</p>  <p>parrafo 2</p> <p>parrafo 3</p>";
$result_information1 = str_replace("<p>[1]", "<p>cambio", $result_information);
echo $result_information1;
?>

我尝试使用 &lt;p&gt;[1] ,不幸的是它对我不起作用,有什么方法可以获取第一段并替换它?

【问题讨论】:

  • 有很多方法可以做到这一点,但我认为你要么需要在&lt;/p&gt; &lt;p&gt; 上分解为一个数组,要么使用一个 html 解析库来识别和替换你需要的部分。你也可以和这个一起破解一些东西:stackoverflow.com/questions/5696412/… + str_replace()

标签: php html replace


【解决方案1】:

它将使用 preg_split() 从 $result_information 创建一个数组,然后替换数组的第一个元素。

<?php
$result_information = "<p>parrafo 1</p>  <p>parrafo 2</p> <p>parrafo 3</p> <p>parrafo 4</p>";
$result_information = preg_replace("/<\/p>(.*?)<p>/", "<p></p>", $result_information); # remove spaces
$array = preg_split("/<p>(.*?)<\/p>/", $result_information, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$array[0] = "cambio";
$array[2] = "cambio";
$result_information1 = "<p>" . implode($array, "</p><p>"). "</p>";
echo $result_information1;
?>

【讨论】:

  • 我相信这是对所提问题的最佳答案,但是如果举个例子会更有帮助。
  • thanks works 部分是否有任何方法可以使段落保持完整并且可以插入元素?
  • 我更新了我的示例。
【解决方案2】:

恕我直言,最好使用 DOMDocument 来处理这个问题。一如既往,这比使用替换/正则表达式更复杂 - 但通常值得付出努力,因为它将内容处理为 HTML 而不仅仅是纯文本。

能够处理文档片段的主要代码很大程度上基于https://stackoverflow.com/a/29499398/1213708,我所做的只是添加了在您之后引用段落的能力。

p 标签部分只是

$pTags = $doc->getElementsByTagName("p");
$pTags[1]->textContent = "cambio";

首先是获取 p 标记的列表 - 您现在有一个数组,您可以在第二行代码中设置它。

$result_information = "<p>parrafo 1</p>  <p>parrafo 2</p> <p>parrafo 3</p>";

$doc = new DOMDocument();
$doc->loadHTML("<div>$result_information</div>");
$pTags = $doc->getElementsByTagName("p");
$pTags[1]->textContent = "cambio";

$container = $doc->getElementsByTagName('div')->item(0);
$container = $container->parentNode->removeChild($container);
while ($doc->firstChild) {
    $doc->removeChild($doc->firstChild);
}

while ($container->firstChild ) {
    $doc->appendChild($container->firstChild);
}
echo $doc->saveHTML();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2015-11-13
    • 2012-01-13
    相关资源
    最近更新 更多