2012-02-16 3 views
1

фонPHP/HTML текстовое поле строки регулярное выражение (регулярное выражение)

В Wordpress есть функция называется wpautop. Он автоматически добавляет параграфы br-tags на выходе.

Проблема

У меня есть текстовое поле внутри $ содержания строки, и я не хочу, автоматическое форматирования внутри этого текстового поля. В строке может быть более одного текстового поля.

Пример строки - до 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. Вместо этого используйте новое регулярное выражение.
+1

Я не знаком с WordPress, но что '' тег делает внутри 'textarea'? – bummzack

+0

Это тоже вещь, о которой стоит упомянуть. –

+0

Он предназначен для представления кода, но он должен был быть <html>. –

ответ

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. Теперь вы знаете, что каждый второй элемент не является текстовым полем. Примените к нему wpatoup().
  3. Присоединиться снова.
+0

Это не сработало. Var_dump дает только целую строку в [0]. –

+0

Отредактировано. Обратите внимание, что s после #. –

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

я получил ошибку "Предупреждение: DOMDocument :: loadHTML() [domdocument.loadhtml]: htmlParseStartTag: неуместны <HTML> тег в Entity" –

+0

@ JensTörnell Проверьте это прямо сейчас ,, я редактировал, и теперь он работает отлично –

Смежные вопросы