Ajustar todos los ‘s en , tomar el atributo alt y agregarlo a un interior

Tratando de reemplazar este código jquery con alguna magia del 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'); }); });

Todo lo que hace es tomar esto:

 My caption 

Y lo reemplaza con:

 
My caption

My caption

Las imágenes están dispersas en un bloque de html con formato textil entre

‘s. Algo como esto:

 

My paragraph text

Another paragraph text with more text

And so on

Permite a los usuarios flotar imágenes a la izquierda, a la derecha o al centro y las miniaturas se crean automáticamente usando phpthumb. Asumo que necesitaría usar expresiones regulares. Soy nuevo en php y solo conozco la encoding frontend. ¿Cómo atacarías esto?

Solutions Collecting From Web of "Ajustar todos los ‘s en , tomar el atributo alt y agregarlo a un interior"

Te recomiendo que uses un analizador como DOMDocument . Además con DOMXPath puedes traducir el código de jQuery casi uno por uno:

 $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();

Un código completamente no probado:

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

{$matches[2]}

EOT; #this should be at the start of line

¿Interesado, sin embargo, en por qué no puedes sacar el html correcto en primer lugar? ¡La carga de un motor regex no está sin gastos generales!

Creo que podría interesarte una biblioteca PHP que imita las capacidades de jQuerys nativamente dentro de PHP usando sus extensiones DOM.

El proyecto se llama PHPQuery – http://code.google.com/p/phpquery/

Se puede instalar fácilmente a través de PEAR y el uso es similar a la syntax de jQuery

Terminó usando esto:

 < ?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); } ?>