14. juli 2012 - 22:42
Der er
10 kommentarer og 1 løsning
brug af rtrim til at fjerne <br> i enden af streng
Jeg ønsker at fjerne <br> hvis de er i slutningen af streng. jeg kan ikke forstå hvorfor det her går galt: echo rtrim(trim('<p><em>test:test</em></p> '), '<br>'); // udskriver "<p><em>test:test</em>" Jeg fatter det ikke, for jeg beder den jo kun om at fjerne <br> nogen som kan hjælpe med svar på det?
Annonceindlæg tema
Cloud & AI
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Faktisk udskriver den <p><em>test:test</em></p Det du skriver i anden parameter til rtrim er ikke en streng, der skal fjernes, men en usorteret liste af tegn, der skal fjernes. > matcher, og bliver fjernet. p gør ikke, og så stopper den. Du skal nok bare bruge en almindelig replace.
Hvis det er din egen kode som putter <br> ind så ville det nok være bedst ikke at putte det ind til at starte med.
Ellers sådan her hvis ét br i slutningen skal slettes :
$str = preg_replace('{(<br>)$}i', '', $str);
Ellers sådan her hvis alle br i slutningen skal slettes :
$str = preg_replace('{(<br>)+$}i', '', $str);
scooter jeg takker for dit svar som jeg benytter preg_replace('{(<br>)+$}i', '', $str) Tak for hjælpen Erik og Scooter :o) Smid svar
Hej igen Må jeg bede om at få feedback på flg html filter jeg har lavet: // rensning af html hentet fra andre sider // jeg ønsker at forenkle html'en og ændre h1'er til h2'er $output = 'rodet html hentet fra anden side'; $output = str_replace(array("\r\n","\n","\r","\t"), ' ', $output); $output = preg_replace('/<br(.*?)>/i', '<br>', $output); // ændrer alle <br/> <br/ > <br /> til <br> $output = preg_replace('/<p(.*?)>/i', 'P_BEGIN', $output); // gemmer <p> og <p eteellerandet> tags $output = preg_replace('/</p>/i', 'P_END', $output); $output = preg_replace('/<h1(.*?)>/i', 'H1_BEGIN', $output); $output = str_replace('/</h1>/i', 'H1_END', $output); $output = strip_tags($output); // resten fjernes bare $output = str_replace(array('"','"'), '', $output); // jeg tillader ikke " og " - erstatter dem med ingenting $output = str_replace('BRBRBR', '<br>', $output); $output = str_replace('P_BEGIN', '<p>', $output); $output = str_replace('P_END', '</p>', $output); $output = str_replace('H1_BEGIN', '<h2>', $output); $output = str_replace('H1_END', '</h2>', $output); $output = preg_replace('{(<br>)+$}i', '', $output);// fjerner eventuelle <br> i enden (men hvad med nogen mellemrum?? kan de forstyrre?) $output = preg_replace('~\s{2,}~', ' ', $output);//fjerner dobbelt mellemrum $output = preg_replace('/ </', '<', $output);// fjerner eventuelle mellemrum før eller efter <> tags $output = preg_replace('/> /', '<', $output);// fjerner eventuelle mellemrum før eller efter <> tags $output = trim($output);
nu bedre: Jeg er ikke så god til det, så I må meget gerne lige kigge om der er noget som ser helt dumt ud ;o) function filter_html($output, $ident=false){ // rensning af html $output = str_replace(array("\r\n","\n","\r","\t"), ' ', $output); $output = preg_replace('/<br(.*?)>/i', 'BRBRBR', $output); // ændrer alle <br/> <br/ > <br /> til <br> $output = preg_replace('/<p(.*?)>/i', 'P_BEGIN', $output); // gemmer <p> og <p eteellerandet> tags $output = preg_replace('/<\/p>/i', 'P_END', $output); $output = preg_replace('/<h1(.*?)>/i', 'H1_BEGIN', $output); $output = preg_replace('/<\/h1>/i', 'H1_END', $output); if ($ident)$output = str_replace('/'.$ident.'/', '', $output); $output = strip_tags($output); // resten fjernes bare $output = str_replace(array('/"/','/"/','/´/'), '', $output); // jeg tillader ikke " og " - erstatter dem med ingenting $output = str_replace('BRBRBR', '<br>', $output); $output = str_replace('P_BEGIN', '<p>', $output); $output = str_replace('P_END', '</p>', $output); $output = str_replace('H1_BEGIN', '<h2>', $output); $output = str_replace('H1_END', '</h2>', $output); $output = preg_replace('~\s{2,}~', ' ', $output);//fjerner dobbelt mellemrum $output = preg_replace('/ </', '<', $output);// fjerner eventuelle mellemrum før eller efter <> tags $output = preg_replace('/> /', '>', $output);// fjerner eventuelle mellemrum før eller efter <> tags $output = preg_replace('{(<br>)+$}i', '', $output);// fjerner eventuelle <br> i enden (men hvad med nogen mellemrum?? kan de forstyrre?) return trim($output); // fjerner tomhed og de underlige linjeskift $output = preg_replace('/<br><br><br>/', '<br><br>', $output); $output = preg_replace('/<p></p>/', '', $output);// fjerner eventuelle mellemrum før eller efter <> tags $output = preg_replace('/<p><br>/', '<p>', $output); $output = preg_replace('/<br></p>/', '</p>', $output); } På forhånd tak
return trim($output); skal selvfølgelig være til sidst ;o)
function filter_html($output, $ident=false){ // rensning af html $output = str_replace(array("\r\n","\n","\r","\t"), ' ', $output); $output = preg_replace('/<br(.*?)>/i', 'BRBRBR', $output); // ændrer alle <br/> <br/ > <br /> til <br> $output = preg_replace('/<p(.*?)>/i', 'P_BEGIN', $output); // gemmer <p> og <p eteellerandet> tags $output = preg_replace('/<\/p>/i', 'P_END', $output); $output = preg_replace('/<h1(.*?)>/i', 'H1_BEGIN', $output); $output = preg_replace('/<\/h1>/i', 'H1_END', $output); if ($ident)$output = str_replace('/'.$ident.'/', '', $output); $output = strip_tags($output); // resten fjernes bare $output = str_replace(array('/"/','/"/','/´/'), '', $output); // jeg tillader ikke " og " - erstatter dem med ingenting $output = str_replace('BRBRBR', '<br>', $output); $output = str_replace('P_BEGIN', '<p>', $output); $output = str_replace('P_END', '</p>', $output); $output = str_replace('H1_BEGIN', '<h2>', $output); $output = str_replace('H1_END', '</h2>', $output); $output = preg_replace('~\s{2,}~', ' ', $output);//fjerner dobbelt mellemrum $output = preg_replace('/ </', '<', $output);// fjerner eventuelle mellemrum før eller efter <> tags $output = preg_replace('/> /', '>', $output);// fjerner eventuelle mellemrum før eller efter <> tags $output = preg_replace('{(<br>)+$}i', '', $output);// fjerner eventuelle <br> i enden (men hvad med nogen mellemrum?? kan de forstyrre?) // fjerner tomhed og de underlige linjeskift $output = preg_replace('/<br><br><br>/i', '<br><br>', $output); $output = preg_replace('/<p><\/p>/i', '', $output); $output = preg_replace('/<p><br>/i', '<p>', $output); $output = preg_replace('/<br><\/p>/i', '</p>', $output); return trim($output); }
<ole> Det ser godt nok ikke særlig effektivt ud. Hvad bruger du det til - og hvorfor er det nødvendigt? 23 funktionskald - heraf mange til RegExp-funktioner, der er kendt som laaaaaangsomme. Mon ikke der er et bedre sted at sætte ind? =) /mvh </bole>
15. juli 2012 - 20:27
#10
det er nogen tekster jeg henter fra andre og der er masser af rod i dem. så jeg rydde rgroft op i dem. ligegodt om det er langsommeligt - det er kun 1 gang det skal ordnes. Men ok tak jeg vidste ik at regex er langsommere
15. juli 2012 - 21:17
#11
De steder, hvor det er en fast defineret streng, du skal 'oversætte', bør du undlade at bruge RegExp. De bær forbeholdes strenge med et mønster, der skal genkendes og udskiftes *o)
Kik i øvrigt på
strtr (string translate), som er beregnet til den slags
Vi tilbyder markedets bedste kurser inden for webudvikling