Regex для создания миниатюр!?!?! (но это безумие!) - PullRequest
6 голосов
/ 28 апреля 2010

Итак, вот моя ситуация и решение, которое я придумала для решения проблемы. Я создал приложение, которое включает TinyMCE, чтобы позволить пользователям создавать HTML-контент для публикации. Пользователь может включать изображения в свою разметку и перетаскивать / изменять их размер, влияя на окончательные атрибуты ширины / высоты в теге IMG. Это все замечательно, пользователи могут включать изображения и изменять их размер / перемещать в соответствии с их желаемым видом. Но одна большая проблема заключается в том, что я сейчас отправляю (возможно) намного большее изображение клиенту, только чтобы браузер изменил размер изображения в запрошенные атрибуты ширины / высоты. Вся эта пропускная способность и потерянное время загрузки ....

Таким образом, мое решение заключается в предварительной обработке содержимого разметки моих пользователей, сканировании всех тегов IMG и анализе атрибутов Height / Width / Src. Затем установите для каждого тега img SRC запрос phpThumb, в котором проанализированная высота / ширина будет передана в URL-адрес миниатюр. Это создаст мое уменьшенное изображение (оптимизация пропускной способности за счет использования процессора и кэширования). Что вы думаете об этом решении? Я видел другие посты, где люди использовали mod_rewrite, чтобы делать что-то подобное, но я хочу влиять на содержимое службы страниц, а не манипулировать запросами изображений, когда они принимаются. .... Есть мысли по поводу этого дизайна?

Мне нужна помощь с мелкими деталями, поскольку моим навыкам регулярных выражений нужно немного поработать, но у меня очень мало времени и обещаю в скором времени оплатить свои долги по техническим знаниям. Чтобы упростить регулярные выражения, я могу быть уверен в некоторых вещах. Только теги img, которые нуждаются в этой обработке, будут иметь существующие атрибуты width = "" height = "" (с двойными кавычками и текстом в нижнем регистре, но я предполагаю, что сопоставление текста без учета регистра будет лучше, если TinyMCE изменится)

Итак, регулярное выражение для сопоставления только с необходимыми тегами Img и, может быть, еще три регулярных выражения для извлечения src, ширины и высоты?

Спасибо всем.

Ответы [ 3 ]

3 голосов
/ 28 апреля 2010

Я думаю, что использование регулярных выражений для этого плохая идея, и вам лучше разобрать его, используя что-то вроде PHP Simple HTML DOM Parser , тогда вы можете сделать что-то вроде:

// Load HTML from a string
$html->load($your_posted_content);

// Find all images 
foreach($html->find('img') as $element) 
       echo $element->src . '<br>';
1 голос
/ 28 апреля 2010

Попробуйте это:

(?i)<img(?>\s+(?>src="([^"]*)"|width="([^"]*)"|height="([^"]*)"|\w+="[^"]*"))+

Это будет соответствовать любому тегу изображения, и если присутствуют атрибуты src, width и height, их значения будут сохранены в группах 1, 2 и 3 соответственно. Но для этого не требуется каких-либо из этих атрибутов, поэтому вы должны проверить, что все три группы содержат значения перед обработкой.

0 голосов
/ 28 апреля 2010

Вообще говоря, RegEx не годится для разбора HTML .. Но в вашем случае вы можете обойтись без него, если вы ограничите область видимости очень узким (т.е. только ищите 1003 * и height=".." атрибуты .. или что-то в этом роде.

Лучшим решением может быть асинхронная передача содержимого из TinyMCE, отслеживание сцен, обработка его на стороне сервера с помощью надлежащего анализатора HTML / XML, а затем обновление содержимого редактора после завершения.

...