2012-02-16 128 views
1

背景PHP/HTML textarea的字符串的正則表達式(正則表達式)

在WordPress有一個叫做wpautop功能。它在輸出中自動添加段落br標籤。

問題

我有一個$內容字符串中一個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。改爲使用新的正則表達式。
+1

我不熟悉WordPress的,但有什麼''標籤的'textarea'裏面做什麼? – bummzack 2012-02-16 17:16:48

+0

這也是值得一提的事情。 – 2012-02-16 17:18:03

+0

這是爲了呈現代碼,但它應該是<html>。 – 2012-02-16 17:19:27

回答

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. 分割字符串,其中有文字區域。
  2. 現在你知道每第二個元素不是一個textarea。將wpatoup()應用於它。
  3. 再次參加。
+0

這沒有奏效。 var_dump只給出[0]中的整個字符串。 – 2012-02-16 17:20:51

+0

已編輯。注意#在#之後。 – 2012-02-16 17:24:28

1

Cheeck了這一點,那將是沒什麼太大的幫助

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

我得到一個錯誤「警告:DOM文檔:: loadHTML()[domdocument.loadhtml]:htmlParseStartTag:找不到<HTML>標籤在實體」 – 2012-02-16 18:17:35

+0

@JensTörnell現在檢查了這一點,,我已經編輯,現在它工作正常 – 2012-02-20 04:40:40