Avatar billede gertnissen Nybegynder
05. september 2005 - 20:54 Der er 14 kommentarer

"substr" der ikke bryder html tags

Substr forkorter 'brutalt' præcis der hvor den skal. Jeg søger en funktion ala substr der ikke bryder html tags som f.eks. <a href=></a>, <img>, <font> og lign, men gerne <p> og <div>.

Skal jeg ud i at læse et tegn adgangen og med flag holde styr på hvornår jeg er indenfor/udenfor tilladte tags ?

Hvordan laves det, eller findes det allerede ?
Avatar billede jakobdo Ekspert
05. september 2005 - 21:55 #1
Hvad med noget i denne stil: preg_replace('/(<(div|p).*?>)([\\d\\w\\s,.]{0,20}).*?(<\/(div|p)>)/', '$1$3$4', $tekst);
Avatar billede gertnissen Nybegynder
05. september 2005 - 23:18 #2
ok, der behøver jeg noget ekstra forklaring - hvordan virker det som en substr, hvor angiver jeg længden ?
Avatar billede gertnissen Nybegynder
06. september 2005 - 00:14 #3
Nu har jeg fundet dette
http://dk.php.net/manual/en/function.substr.php#52893 - virker egentlig ok, med holder ikke sammen på <a href> og <a>, dvs kan splitte mellem de to par
http://dk.php.net/manual/en/function.substr.php#47091 - Splitter midt i det hele
http://dk.php.net/manual/en/function.substr.php#44606 - Heller ikke helt ok

Jeg har øget antal point.
Avatar billede gertnissen Nybegynder
06. september 2005 - 00:32 #4
@jakoba
Fjerner dit eksempel ikke blot alle html tags, bortset fra <div> og <p> og laver en substr på det ?

Jeg vil gerne have at evt. html tags bliver bevaret, blot at der ikke substr's midt i en html tag. Grunden til det særlige forhold med <div> og <p>, er at de kan blive meget lange, så hvis der splittes midt i dem skal der jo indsættes en passende </div> eller </p> til slut så html koden ikke smadres.
Avatar billede jakobdo Ekspert
06. september 2005 - 09:06 #5
Jo, jeg prøvede bare lige en hurtig løsning! :o(
Avatar billede gertnissen Nybegynder
06. september 2005 - 09:21 #6
jakoba, har du også en mere 'langsom' korrekt løsning ;-)
Avatar billede jakobdo Ekspert
06. september 2005 - 09:31 #7
Desværre ikke, så langt tror jeg ikke mine regexp evner rækker.
Tror vi skal have fat i nogle af de hardcore regexp'er... :o)
Avatar billede gertnissen Nybegynder
06. september 2005 - 17:27 #8
S T A D I G  U L Ø S T  !

Jeg hæver gerne til 200 point for en løsning !

Der må da være nogen der kan løse dette problem ?
Avatar billede olebole Juniormester
06. september 2005 - 18:22 #9
<ole>

Jamen, det er der da osse  :)

<?
$s = "hjh kj hkjh <p style='color:red'>En tekst i et p-tag</p> Tekst imellem tags <div>Tekst i et div</div> tekst til sidst <p>Næ, sq ... der kom mere mellem p-tags</p> - og SÅ er det slut  :)";

function mySubstr($aMatch) {
    return "<".$aMatch[1].$aMatch[2].">".substr($aMatch[3], 0, 5)."</".$aMatch[4].">";
}
$s = preg_replace_callback("/<(p|div)([^>]*)>([\w\W]*)<\/(\\1)>/U", "mySubstr", $s);
?>

<xmp>
<?=$s?>
</xmp>

Tag dig ikke af det invalide, IE-proprietære xmp-element. Det er meget godt til den slags undersøgelser/eksempler - men bør naturligvis ikke bruges på WWW  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
06. september 2005 - 18:32 #10
- og du ændrer naturligvis tallet 5 i substr, så det passer til dit behov  :)
Avatar billede gertnissen Nybegynder
06. september 2005 - 19:59 #11
wow det var godt nok et avanceret eksempel. Men hvis jeg forstår det korrekt så forkorter det teksten mellem tags. Se eks. http://famnissen.dk/substrhtml4.php

Egentlig ville jeg blot have en funktion der som substr læser fra pos 0 til pos n, og hvis n er midt i et tag eller mellem et par, så fortsættes til de er slut.

Eks.

hjh kj hkjh <p style='color:red'>En tekst i et p-tag</p> Tekst imellem tags <div>Tekst i et div</div> tekst til sidst <p>Næ, sq ... der kom mere mellem p-tags</p> - og SÅ er det slut :)

html_substr(20) = hjh kj hkjh <p style='color:red'>En tekst i et p-tag</p>

Men fordi p, div og font tags ofte er lange modsat img og a href, skulle den eks. blot returnere = hjh kj hkjh <p style='color:red'>En tekst</p>

Er det muligt
Avatar billede gertnissen Nybegynder
08. september 2005 - 21:07 #12
Hej Olebole

Dit eksemple virker, men løser ikke min aktuelle udfordring !

Lav en substr der ikke cutter midt i en HTML tag eller mellem et par.
Avatar billede gertnissen Nybegynder
08. september 2005 - 21:08 #13
Er der ingen der kender en løsning eller har et forslag ?
Avatar billede gertnissen Nybegynder
11. september 2005 - 23:12 #14
anyone - Hvor er alle eksperterne ??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester