Groups | Search | Server Info | Login | Register


Groups > it.comp.www.php > #23115

Re: baco di PHP?

From Sandro kensan <kensan@kensan.it>
Newsgroups it.comp.www.php
Subject Re: baco di PHP?
Date 2024-03-10 23:44 +0100
Message-ID <l56rebFj4joU2@mid.individual.net> (permalink)
References <l4n6keF5lm6U1@mid.individual.net> <31cpuih2fieon1rtbcvkfquir98cn5o6bc@L.Serni>

Show all headers | View raw


On 09/03/24 19:55, Leonardo Serni wrote:
> On Tue, 5 Mar 2024 01:17:18 +0100, Sandro kensan <kensan@kensan.it> wrote:
> 
>> Ho un problema con il mio sito e per isolarlo ho ridotto il codice
>> all'osso e ho individuato qualche cosa che non mi sarei mai immaginato.
> 
> Fa quello che gli dici di fare: si interrompe quando trova un nodo diverso da
> "<br>". Ma mentre
> 
> 	"<br><br><br>"
> 
> termina con <br>,
> 
> 	"<br><br><br>\n"
> 
> non termina per "<br>". Termina con un nodo TEXT che contiene "\n".

Grazie. Ecco che viene fuori tutta la mia ignoranza sul DOM, però ci 
sbatto la testa ma non cedo. Sarebbe stato tutto molto più semplice con 
le espressioni regolari ma il DOM è il metodo corretto per questo 
problema, in quanto le regex hanno spesso bachi e non considerano casi 
speciali che possono avvenire. Comunque per qualcuno che è alla ricerca 
della soluzione (magari tramite il web anche se Google gruppi ha 
deindicizzato i post nuovi sui ng), ecco il codice:

function strip_br($dom) {

		

// Rimuovi i tag <br> in coda al contenuto del <body>

			$element = $dom->getElementsByTagName("body")->item(0);

$childs = $element->childNodes;

			

// Itera dall'ultimo al primo nodo figlio

for ($i = $childs->length - 1; $i >= 0; $i--) {

   $el = $childs->item($i);

   if ($el->nodeName == "br") {

     $el->parentNode->removeChild($el);

   } else {

     if($el->nodeName != "#text") {

       break; // Interrompi quando viene trovato un nodo diverso da text 
e da br

     }else{

       $nodeValue = rtrim($el->nodeValue, "\n "); // Rimuovi spazi vuoti 
e \n alla fine del testo

       if (!empty($nodeValue)) {

         $el->nodeValue = $nodeValue; // Aggiorna il valore del nodo

         break; // Interrompi quando l'ultimo nodo è del testo non vuoto

       } else {

         $el->parentNode->removeChild($el); // Rimuovi il nodo vuoto

       }

     }

   }

}

return $dom;


}

Mi pare funzioni bene. Certo che è complicato e pensavo fosse più semplice.

Grazie di nuovo Leonardo, senza il tuo aiuto non avrei mai trovato il 
baco. Ho provato a chiedere a ChatGPT ma lui i bachi li crea e non li 
risolve.

-- 
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov

Back to it.comp.www.php | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

baco di PHP? Sandro kensan <kensan@kensan.it> - 2024-03-05 01:17 +0100
  Re: baco di PHP? Leonardo Serni <lserni@gmail.com> - 2024-03-09 19:55 +0100
    Re: baco di PHP? Sandro kensan <kensan@kensan.it> - 2024-03-10 23:44 +0100
    Re: baco di PHP? Sandro kensan <kensan@kensan.it> - 2024-03-10 23:44 +0100
      Re: baco di PHP? Leonardo Serni <lserni@gmail.com> - 2024-03-13 19:19 +0100

csiph-web