PHP / HTML textarea字符串regexp(正则表达式)

时间:2012-02-16 17:06:06

标签: php html string preg-replace

背景

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

问题

我在 $ content 字符串中有一个textarea,我不希望在该textarea中自动格式化。可能是字符串中不止一个textarea。

示例字符串 - 在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. 以某种方式创建一个包含字符串中所有textareas的数组。运行wpautop并将它们再次插回到字符串中。
  2. 不要使用wpautop。请使用新的正则表达式。

2 个答案:

答案 0 :(得分:1)

$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. 拆分字符串在哪里是textareas。
  2. 现在您知道每个第二个元素都不是textarea。将wpatoup()应用于它。
  3. 再次加入。

答案 1 :(得分:1)

检查一下它会有所帮助

    $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;