gpt4 book ai didi

php - 根据字符串内容替换字符串的一部分

转载 作者:搜寻专家 更新时间:2023-10-31 20:53:06 25 4
gpt4 key购买 nike

标记示例:

<p> a paragraph </p>
<pre lang="html">
&lt;p&gt; a paragraph &lt;/p&gt;
</pre>
<code lang="html">
&lt;p&gt; a paragraph &lt;/p&gt;
</code>

如何选择 <pre> 之间的所有内容? , </pre> , <code> , </code>并在上面运行一个函数?通过这个函数,我需要传递 3 个参数:所选字符串的一部分(&lt;p&gt; a paragraph &lt;/p&gt;)、容器类型(precode)以及容器的参数(如 lang="html")。

该函数应根据其他 2 个参数更改字符串的选定部分(如果相关,我想在其上运行 GeShi 荧光笔),然后用它替换原始字符串的内容,包括容器。像这样的东西:

<p> a paragraph </p>
<div class="html pre">
&lt;p&gt; a paragraph &lt;/p&gt;
</div>
<div class="html code">
&lt;p&gt; a paragraph &lt;/p&gt;
</div>

最佳答案

我觉得应该是这样的:

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

$elements = $xpath->query('//pre | //code');

在某些情况下(例如:如果您使用 getElementsByTagName 而不是 XPath),您将需要对数组进行操作以获得正确的行为(请参阅 this question ),因此您需要将节点复制到数组中。我会为这个例子这样做:

$array = array();
foreach ($elements as $element) {
$array[] = $element;
}

foreach ($array as $element) {
$tag = $element->tagName;
$content = $element->textContent;
$lang = $element->getAttribute('lang');
$new_content = my_function($tag, $content, $lang);

$new_element = $dom->createElement('div');
$new_element->setAttribute('class', "$tag $lang");
$new_element->nodeValue = $new_content;
$element->parentNode->replaceChild($new_element, $element);
}

当然,在上面的例子中,my_function 是未定义的。但它应该能让您对操作方法有一个很好的了解。

请注意,这不适用于嵌套元素,例如:

<pre lang="html">
<p>some nested element</p>
&lt;p&gt; a paragraph &lt;/p&gt;
</pre>

如果您想处理嵌套元素,请使用 a function to get the innerHTML而不是使用 $element->textContent

关于php - 根据字符串内容替换字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5524730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com