PHP/HTML 文本区域字符串 regexp(正则表达式)

发布于 2025-01-06 02:39:09 字数 873 浏览 0 评论 0原文

背景

在Wordpress中有一个名为wpautop的函数。它会在输出中自动添加段落和 br 标签。

问题

我在 $content 字符串中有一个文本区域,但我不希望在该文本区域内自动格式化。字符串中可能有多个文本区域。

示例字符串 - wpautop 之前

This is my text. My paragraph.
<textarea class="test">
    &lt;html&gt;Code test&lt;/html&gt;
</textarea>

示例字符串 - wpautop 之后

<p>This is my text. My paragraph</p>
<textarea class="test">
    <br />
    &lt;html&gt;Code test&lt;/html&gt;<br />
</textarea>

可能的解决方案

  1. 以某种方式创建一个包含字符串中所有文本区域的数组。运行 wpautop 并将它们再次插入到字符串中。
  2. 不要使用 wpautop。请改用新的正则表达式。

Background

In Wordpress there is a function called wpautop. It adds paragraphs an br-tags automatically on output.

Problem

I have a textarea inside a $content string and I don't want auto formatting inside that textarea. The might be more than one textarea in the string.

Example string - before wpautop

This is my text. My paragraph.
<textarea class="test">
    <html>Code test</html>
</textarea>

Example string - after wpautop

<p>This is my text. My paragraph</p>
<textarea class="test">
    <br />
    <html>Code test</html><br />
</textarea>

Possible solutions

  1. Somehow create an array with all the textareas in the string. Run wpautop and insert them back again into the string.
  2. Don't use wpautop. Use a new regexp for it instead.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

过期情话 2025-01-13 02:39:09
$splited=preg_split('#<textarea.*?</textarea>#s', $text, PREG_SPLIT_DELIM_CAPTURE);

for ($i=0; $i<count($splited); $i+=2)
     $splited[$i]=wpatoup($splited[$i]);

echo implode('', $splited);
  1. 分割字符串,其中是文本区域。
  2. 现在您知道每隔一个元素都不是文本区域。对它应用 wpatoup() 。
  3. 再次加入。
$splited=preg_split('#<textarea.*?</textarea>#s', $text, PREG_SPLIT_DELIM_CAPTURE);

for ($i=0; $i<count($splited); $i+=2)
     $splited[$i]=wpatoup($splited[$i]);

echo implode('', $splited);
  1. Split string where are textareas.
  2. Now you know that every secondth element is not a textarea. Apply wpatoup() to it.
  3. Join back again.
云淡风轻 2025-01-13 02:39:09

看看这个会有很大帮助

    $textareas = '<textarea>
                    <html>Code test1</html>
                   </textarea>
                   <textarea class="test1">
                   <html>Code test2</html>
                   </textarea>
                   <textarea class="test3">
                   <html>Code test3</html>
                   </textarea>
                   <textarea class="test4">
                   <html>Code test4</html>
                   </textarea>';
error_reporting(E_ERROR|E_PARSE);
$dom = new DOMDocument();
$dom->loadHTML($textareas);

$xml  = simplexml_import_dom($dom);
$data  = $xml->xpath('//textarea');
foreach($data as $key=>$value):
    echo $data[$key][$key+1]."<br/>";
endforeach;

Cheeck this out it would be much helpful

    $textareas = '<textarea>
                    <html>Code test1</html>
                   </textarea>
                   <textarea class="test1">
                   <html>Code test2</html>
                   </textarea>
                   <textarea class="test3">
                   <html>Code test3</html>
                   </textarea>
                   <textarea class="test4">
                   <html>Code test4</html>
                   </textarea>';
error_reporting(E_ERROR|E_PARSE);
$dom = new DOMDocument();
$dom->loadHTML($textareas);

$xml  = simplexml_import_dom($dom);
$data  = $xml->xpath('//textarea');
foreach($data as $key=>$value):
    echo $data[$key][$key+1]."<br/>";
endforeach;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文