Avatar billede learner Praktikant
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?
Avatar billede erikjacobsen Ekspert
14. juli 2012 - 22:54 #1
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.
Avatar billede scootergrisen Nybegynder
15. juli 2012 - 00:59 #2
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.
Avatar billede scootergrisen Nybegynder
15. juli 2012 - 01:09 #3
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);
Avatar billede learner Praktikant
15. juli 2012 - 11:59 #4
scooter jeg takker for dit svar som jeg benytter

preg_replace('{(<br>)+$}i', '', $str)

Tak for hjælpen Erik og Scooter :o)
Smid svar
Avatar billede learner Praktikant
15. juli 2012 - 13:20 #5
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);
Avatar billede learner Praktikant
15. juli 2012 - 14:08 #6
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
Avatar billede learner Praktikant
15. juli 2012 - 14:11 #7
return trim($output); skal selvfølgelig være til sidst ;o)
Avatar billede learner Praktikant
15. juli 2012 - 14:14 #8
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);     
}
Avatar billede olebole Juniormester
15. juli 2012 - 17:18 #9
<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>
Avatar billede learner Praktikant
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
Avatar billede olebole Juniormester
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
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