Groups | Search | Server Info | Login | Register
Groups > it.comp.www.php > #23115
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar
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