Regex для перемещения изображения в разметке с помощью PHP при публикации контента с TinyMCE - PullRequest
0 голосов
/ 01 ноября 2009

Я использую TinyMCE для публикации контента на моем сайте. У меня проблема в том, что я могу вставить изображение только в другой элемент, например, в абзац, даже если я помещаю курсор в конец содержимого.

Итак, когда я публикую контент, в настоящее время я получаю разметку вроде:

<p>Text content <img src="blah" /></p><p>Another paragraph</p>

Я заметил, что WordPress и пример сайта TinyMCE вставляют изображения описанным выше способом.

Мне не удалось найти решение относительно того, как я могу вставить изображение в TinyMCE вне любого другого элемента, поэтому мой следующий шаг - попытаться изменить сторону контент-сервера, чтобы при публикации моего контента я в состоянии исправить разметку перед сохранением в моей БД, так что в итоге я получу:

<p>Text content</p><img src="blah" /><p>Another paragraph</p>

Кто-нибудь знает, что мне нужно сделать, чтобы добиться этого? Я знаю, что регулярное выражение должно работать, но я не уверен, что или как использовать его для этого. Еще лучше, если у кого-то есть решение проблемы TinyMCE, это было бы еще лучше.

Я знаю, что могу, конечно, использовать JS для достижения этой клиентской стороны на лету, но это решение не идеально.

Большое спасибо,

D

1 Ответ

2 голосов
/ 01 ноября 2009

Не используйте RegEx для манипулирования узлами HTML! Он не предназначен для этого и слишком хрупок.

HTML не является языком Regular , и даже несмотря на нерегулярные функции, поддерживаемые многими современными реализациями Regular Expression, попытка манипулировать HTML с помощью регулярного выражения в лучшем случае все еще трудна.


Для быстрого и грязного решения вы можете сделать:

preg_replace
    ( "/(<img[^>]++>)\s*+(</p>)/gi"
    , "$2$1"
    , $HtmlText
    );


Но , который потерпит неудачу с несколькими допустимыми конструкциями HTML - то, что вы на самом деле должны использовать, это что-то вроде PHP Simple HTML DOM Parser для анализа текста HTML в HTML DOM, манипулирования этим DOM, а затем снова вывести текст.

...