Avatar billede kimox Nybegynder
23. april 2011 - 10:28 Der er 13 kommentarer

hjælp til substr_replace

Hej eksperter.

jeg har følgende kode:

if (strlen($tekst) > 50) {
$amsg = substr_replace($tekst, '... <br /><br /><form name=\'readmore\' method=\'post\' action=\'nyhed.php?id='.$id.'\'><input name=\'readknap\' type=\'submit\' style=\'cursor: hand;\' class=\'submitbox\' id=\'readknap\' value=\'Læs mere\' /></form>', 120);
echo "$amsg";
} else {
echo "$tekst";
}
echo "<br />
    </td>
  </tr>
</table>";
}
?>

Den virker helt som den skal, men nu skal jeg bare "opgradere" den lidt, så den virker lidt mere up2date. - jeg bruger ckeditor til at skrive ind i min database, og når jeg så lægger en smilie ind via editoren, så smider den jo hele linket ind "images/smiley/glad.gif" og det tæller den jo også som tegn i substr_replace - og det får det hele til at se forkert ud, for så får den måske ikke hele src="images/smiley/glad.gif" med til billedet - så stopper den måske på scr="images/smi..." og det får hele siden til at f*cke op.

Så jeg tænker lidt om en af jer kan hjælpe med at få den til at tælle f.eks. mellemrum i stedet for tegn ? eller hvor jeg lige kan løse dette problem?
Avatar billede repox Seniormester
23. april 2011 - 12:05 #1
"Den virker helt som den skal, men nu skal jeg bare "opgradere" den lidt, så den virker lidt mere up2date."

Hvordan er den ikke 'up2date'? Funktionen er ikke engang deprecated?

Med andre ord - why fix it if it isn't broke?
Avatar billede Slettet bruger
23. april 2011 - 12:18 #2
Du ku' replace smiley'erne helt inden du gemmer i databasen, og tilbaws igen inden de vises.

$db = str_replace("<img src='blabla/smil.gif'>",":)",$txt);

$vis = str_replace(":)","<img src='blabla/smil.gif'>",$txt);

Evt. udføre den sidste ude i browseren, for at spare på server-CPU'en..
Avatar billede repox Seniormester
23. april 2011 - 12:21 #3
#2
Det var da noget af en voldsom omgang - hvorfor ikke bare replace ved udtræk? Så slipper man for at konvertere frem og tilbage hele tiden...
Avatar billede webweaver Praktikant
23. april 2011 - 12:48 #4
Som jeg ser det, er problemet, at den tæller din HTML som tegn og dermed så passer det ikke rigtigt med det antal tegn, som du vil vise. Og som du siger, så kan det forekomme, at din substring bryder midt i et img tag, hvilket ser dumt ud.

Er det korrekt forstået?

Så for at det må have virket før, har du bare kørt uden smilies ...

Når problematikken er på plads, er det nemmere at komme med et løsningsforslag :)
Avatar billede Slettet bruger
23. april 2011 - 12:52 #5
#3
For at spare på pladsen i databasen..  - nok lidt farvet at mit eget for-tiden-projekt : )

Men det forhindrer også at en smiley-img-tag bliver klippet i stykker, eller at et indlæg med 5 smileyer (man har set så galt), bliver klippet ned til 2 ord (foruden smileyerne)
Avatar billede kimox Nybegynder
23. april 2011 - 14:43 #6
#4 - Det er nemlig heelt rigtigt Webweaver - nogen gange lyder forklaringen bedre i hovedet end på skrift hehe. - og der tænkte jeg man måske kunne løse problemet med at den talte antal mellemrum.. og efter f.eks. 20 mellemrum så skrev den ... <form............ læs mere ......... </form>

Mvh
Avatar billede webweaver Praktikant
24. april 2011 - 12:51 #7
Kimox, jeg kan ikke se, hvordan det vil løse dit problem? Det vil give nøjagtig samme problematik, da der også er mellemrum i din html, hvormed du kan risikere den bryder midt i der. Ydermere, vil det blive forskellige længde på det viste tekst fra gang til gang, da det afhænger af hvilke ord man lige bruger.
Avatar billede kimox Nybegynder
24. april 2011 - 14:41 #8
Hvad kan man ellers gøre :-/? - nogen ideér?
Avatar billede webweaver Praktikant
24. april 2011 - 16:32 #9
Hvis du ikke vil over i noget regex, kunne du jo i første omgang kigge lidt på det T0M skriver. Altså istedet for du smider et img tag i databasen, så smider du bare smiley'en ind direkte som du skriver det i teksten ( fx :D ) og så efter du tæller tegn og viser det du vil, så replacer du det med din HTML kode ...

Du kan dog stadig risikere, at den bryder midt i :D fx, men der vil ikke være så stor chance for det længere. Og den vil samtidig ikke vise noget grimt halvskrevent HTML, men bare et :.
Avatar billede kimox Nybegynder
24. april 2011 - 16:39 #10
ja men jeg kan ikke replace, da jeg bruger et script fra ckeditor til at smide smilies ind, og den skriver jo den fulde sti til billedet.

Men kan jeg ellers fjerne html ud af min tekst ? så den fjerner alt der står mellem < > for det er kun på den side hvor man kan se de samlede nyheder jeg har problemet.. og der behøver man ikke se om der er smilier i nyheden.
Avatar billede Slettet bruger
24. april 2011 - 18:19 #11
Du trækker jo teksten ud af CK et sted - formentlig med funktionen getData(), inden du sender den til serveren/databasen. Dér kan du stikke kniven ind, og replace de forskellige smiley-img-tags.

PS: Det er ikke nok at se bort fra det som står imellem < og >.
Fordi tags jo også kan optræde i "par" f.eks: <a href..> link </a> eller endnu værre, tabeller.
- Det er ikke umuligt - bare svært.. se link til elegantcode.

En tredie mulighed (nærmest en finte), er at rendere HTML'en (efter den er trukket ud af CKeditor) i en hidden div, og derefter udtrække den rene tekst dérfra, fri for billeder/tabeller/lister...
- Let hvis du bruger jQuery: $('#hidden').html(HTMLfraCK).text() - hvis ikke, så læs op på dette: http://elegantcode.com/2009/06/15/dissecting-jquery-text/

Dérfra kan du så snuppe de første 120 tegn, og gemme dem i et seperat nyheds-resume-felt i databasen, til brug for oversigten.
Avatar billede webweaver Praktikant
24. april 2011 - 18:19 #12
Okay. På den måde.

Ja, det kan du godt. Der vil jeg, hvis det er mig, bruge Regular Expressions.
Det du skal bruge, skal se sådan her ud:

<?php

$text = "Her er noget tekst <img src='blabla/smil.gif'> Her er noget andet tekst";
   
echo preg_replace('/<(.*?)>/', '', $text);

?>


Den fjerner HTML det mellem < og > i $text.
Avatar billede webweaver Praktikant
24. april 2011 - 18:33 #13
Umiddelbart er det kun img tags der skal arbejdes udfra, hvorfor at regex på < > er fint. Der er ikke omtalt andet HTML, så det må man antage, ikke er aktuelt...
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