Enrole todos os em , pegue o atributo alt e adicione-o a um dentro

Tentando replace esse código jquery por alguns magos do lado do servidor php:

$(document).ready(function() { $('#text img').each(function(){ source = $(this).attr('src'); $(this).wrap($('
')).removeAttr('class').removeAttr('height').removeAttr('width'); $(this).after('

' + $(this).attr('alt') + '

'); $(this).attr('src', '/system/tools/phpthumb/phpThumb.php?src=' + source + '&wl=200&hp=200&q=85&f=jpg'); }); });

Tudo o que faz é levar isso:

 My caption 

E o substitui por:

 
My caption

My caption

As imagens são espalhadas por um bloco de html com formato têxtil entre

. Algo assim:

 

My paragraph text

Another paragraph text with more text

And so on

Permite que os usuários flutuem imagens para a esquerda, direita ou central e as miniaturas são criadas automaticamente usando phpthumb. Estou assumindo que eu precisaria usar expressões regulares. Eu sou novo no php e só conheço a codificação de frontend. Como você atacaria isso?

Eu recomendo que use um analisador, como o DOMDocument . Além disso, com DOMXPath você pode traduzir o código jQuery quase um por um:

 $documentSource = '
My caption
'; $doc = new DOMDocument(); $doc->loadHTML($documentSource); $xpath = new DOMXPath($doc); foreach ($xpath->query('//html/body/*[@id="text"]/img') as $node) { // source = $(this).attr('src'); $source = $node->getAttribute('src'); // $(this).after('

' + $(this).attr('alt') + '

'); $pElem = $doc->createElement('p', $node->getAttribute('alt')); // $('
') $divElem = $doc->createElement('div'); $divElem->setAttribute('class', 'caption '.$node->getAttribute('class')); // $(this).wrap( … ); $divElem->appendChild($node->cloneNode(true)); $divElem->appendChild($pElem); $node->parentNode->replaceChild($divElem, $node); // $(this).removeAttr('class').removeAttr('height').removeAttr('width'); $node->removeAttribute('class'); $node->removeAttribute('height'); $node->removeAttribute('width'); // $(this).attr('src', '/system/tools/phpthumb/phpThumb.php?src=' + source + '&wl=200&hp=200&q=85&f=jpg'); $node->setAttribute('src', '/system/tools/phpthumb/phpThumb.php?src=' . $source . '&wl=200&hp=200&q=85&f=jpg'); } echo $doc->saveXML();

Algum código completamente não testado:

 preg_match('|([az\ ]+)|i', 'PUT THE EXISTING HTML HERE', $matches); echo < <  

{$matches[2]}

EOT; #this should be at the start of line

Interessado, no entanto, por que você não pode produzir o html direito em primeiro lugar? Carregar um motor regex não está sem sobrecarga!

Eu acho que você pode estar interessado em uma biblioteca PHP que imita as capacidades jQuerys nativamente dentro do PHP usando suas extensões DOM.

O projeto é chamado PHPQuery – http://code.google.com/p/phpquery/

Poderia ser facilmente instalado através de PEAR e o uso é semelhante à syntax jQuery

Terminou usando isso:

 < ?php $string = '{body}'; $documentSource = mb_substr($string,3,-4); $doc = new DOMDocument(); $doc->loadHTML($documentSource); $xpath = new DOMXPath($doc); foreach ($xpath->query('//html/body/img') as $node) { $node->removeAttribute('height'); $node->removeAttribute('width'); $source = $node->getAttribute('src'); $node->setAttribute('src', '/system/tools/phpthumb/phpThumb.php?src=' . $source . '&wl=200&hp=200&q=85&f=jpg'); $pElem = $doc->createElement('p', $node->getAttribute('alt')); $divElem = $doc->createElement('div'); $divElem->setAttribute('class', 'caption '.$node->getAttribute('class')); $node->removeAttribute('class'); $divElem->appendChild($node->cloneNode(true)); $divElem->appendChild($pElem); $node->parentNode->replaceChild($divElem, $node); } ?>