Gjest Slettet-IHWlGMJn Skrevet 4. august 2010 Del Skrevet 4. august 2010 Heisann Jeg har en database med en del rot jeg vil kjøre gjennom med litt php for å rydde litt. Jeg har f.eks noen instanser av "<strong><strong>tekst</strong></strong>". Jeg vil gjerne kjøre en funksjon som fjerner alle slike doble tags. Slik at det i dette tilfellet ville blitt "<strong>tekst</strong>". Kan jeg bruken en form for preg_replace? Eller vil ikke det fungere da jeg vil at dette skal fungere uavhengig av hvilken tag det måtte være? Har ikke veldig mye greie på regexp. PS: Har ikke helt tenkt gjennom om det er ønskelig å også fjerne den indre tagen om f.eks dette skulle finnes "<strong>tekst<strong>tekst</strong></strong>", men jeg tror det er det. Noen som vet om en grei måte å få dette til på? Lenke til kommentar
jim_smyth Skrevet 4. august 2010 Del Skrevet 4. august 2010 bruk notepad. erstatt <strong><strong> med <strong> osv osv... Lenke til kommentar
Gjest Slettet-IHWlGMJn Skrevet 4. august 2010 Del Skrevet 4. august 2010 Det går jo selvsagt an om tagene er åpnet og lukket ved siden av hverandre, men er jo ikke akkurat veldig lettvint. Og ja, som nevnt. Det vil ikke gå så himla bra med f.eks denne: "<strong>tekst<strong>tekst</strong></strong>" Lenke til kommentar
FraXinuS Skrevet 4. august 2010 Del Skrevet 4. august 2010 function remove_nested_tags($tag, $text){ preg_match_all('/<\/?'.$tag.'>/i', $text, $matches, PREG_OFFSET_CAPTURE|PREG_SET_ORDER); $tags_to_remove = array(); $open_tags = array(); $error_check = array(); foreach($matches as $match){ if($match[0][0] == '<'.$tag.'>'){ $open_tags[] = $match[0]; if(count($open_tags) > 1) $tags_to_remove[] = $match[0]; }else{ if(count($open_tags) > 1) $tags_to_remove[] = $match[0]; array_pop($open_tags); } $error_check[] = strtolower($match[0][0]); } $error_check = array_count_values($error_check); if($error_check['<'.$tag.'>'] != $error_check['</'.$tag.'>']) throw new Exception; $offset = 0; foreach($tags_to_remove as $match){ $text = substr_replace($text, '', $match[1] - $offset, strlen($match[0])); $offset += strlen($match[0]); } return $text; } $text = '<strong>tekst<strong>tekst</strong></strong>'; echo remove_nested_tags('strong', $text) ."\n"; Har ikke testet det så mye, men jeg tror det fungerer. Lenke til kommentar
jim_smyth Skrevet 5. august 2010 Del Skrevet 5. august 2010 Det går jo selvsagt an om tagene er åpnet og lukket ved siden av hverandre, men er jo ikke akkurat veldig lettvint. Og ja, som nevnt. Det vil ikke gå så himla bra med f.eks denne: "<strong>tekst<strong>tekst</strong></strong>" jo det er relativt greit. med den siste kombinasjonen som du nevner så var du ikke helt sikker på om du skulle fjerne det virka det som... eller? håper FraXinus hjelper deg... Lenke til kommentar
Gjest Slettet-IHWlGMJn Skrevet 14. august 2010 Del Skrevet 14. august 2010 Har ikke testet det så mye, men jeg tror det fungerer. Har ikke testet den noe særlig, men koden ser høyst rimelig ut Takker. jo det er relativt greit. med den siste kombinasjonen som du nevner så var du ikke helt sikker på om du skulle fjerne det virka det som... eller? håper FraXinus hjelper deg... Jeg er 99% sikker på at det er ønskelig for alle tags, i mitt tilfelle. Men det er i alle fall ønskelig for en tag som strong Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå