Avatar billede sw_red_6 Nybegynder
04. december 2006 - 11:17 Der er 15 kommentarer og
1 løsning

replace af lister og paragraffer

Jeg får en tekst, som jeg skal have fjernet alle <ol>, <ul>, <li>, </li>, <p>, </p>, <em>, </em>, <strong>, </strong>.

Det er bare det at de ikke "kun" skal fjernes, men erstattes med noget andet.
<ol> & <ul> -> \r\n
<li> -> enten - eller tal afhængig af om det er <ul> eller <ol>
</ol> & </ul> -> \r\n
<p> -> ''
</p> -> \r\n
<em> & </em> & <strong> & </strong> -> '', medmindre der er nogen der ved hvordan man kan lave formatering i en alm. tekst-mail.
Avatar billede sw_red_6 Nybegynder
04. december 2006 - 11:48 #1
eksempel på hvordan teksten kan se ud:
<ul><li>punkt 1</li><li>punkt 2</li><li>punkt 3</li></ul><ol><li>punkt 1</li><li>punkt 2</li><li>punkt 3</li></ol><p>&nbsp;</p><p>Alm. tekst</p><strong>fed skrift</strong><em>krusiv skrift</em>
Avatar billede mcardle Nybegynder
04. december 2006 - 15:25 #2
Hvad skal det erstattes med?

$besked = str_replace("<ul>",":ul:",$besked). Nu erstatter den <ul>-tagget med :ul:
Avatar billede sw_red_6 Nybegynder
04. december 2006 - 16:15 #3
Jeg har fået lavet den her funktion som jeg kører før jeg laver efterfølgende preg_replace. Så mangler jeg bare at kunne formatere <strong> og <em> så det kan læses som fed og kursiv skrift i en tekst-email, ikke en html-email.
Problemet har aldrig været at få ændret <ul> og <ol> taggene, men at få lavet den rigtige ændring af <li>-taggene

  function replace_tags($teksten) {
    $syntax = false;
    $j=0;
    for($i=0;$i<strlen($teksten);$i++) {
      if(substr($teksten, $i, 4) === "<ol>") {
        $syntax = true;
      }
      if($syntax==true) {
        if(substr($teksten, $i, 4) === "<ol>") {
          $teksten = substr_replace($teksten, '', $i, 4);
        }
        if(substr($teksten, $i, 4) === "<li>") {
          $j++;
          $teksten = substr_replace($teksten, $j.'. ', $i, 4);//str_replace("<li>", "$j. ", $teksten);
        }

        if(substr($teksten, $i, 5) === "</li>") {
          $teksten = substr_replace($teksten, '\r\n', $i, 5);;//str_replace("</li>", "\r\n", $teksten);
        }
        if(substr($teksten, $i, 5) === "</ol>") {
          $teksten = substr_replace($teksten, '\r\n', $i, 5);
          $syntax = false;
        }
      } else {

      }
    }
    $returTekst = $teksten;
    return $returTekst;
  }

  $ny_tekst = preg_replace('/<ul>/i', '', $tekst);
  $ny_tekst = preg_replace('/<li>/i', '- ', $ny_tekst);
  $ny_tekst = preg_replace('/<\/li>/i', '\\r\\n', $ny_tekst);
  $ny_tekst = preg_replace('/<\/ul>/i', '\\r\\n', $ny_tekst);
  $ny_tekst = preg_replace('/<p>/i', '', $ny_tekst);
  $ny_tekst = preg_replace('/<\/p>/i', '\\r\\n', $ny_tekst);
Avatar billede jensgram Nybegynder
04. december 2006 - 16:20 #4
Ved ikke, om det er standardiseret som sådan, men nogle mail-klienter formaterer

*dette* med fed
og _dette_ som understreget

Kursivering er jeg ikke klar over...
Avatar billede jensgram Nybegynder
04. december 2006 - 16:22 #5
Ang.

  $ny_tekst = preg_replace('/<ul>/i', '', $tekst);
  $ny_tekst = preg_replace('/<li>/i', '- ', $ny_tekst);
  $ny_tekst = preg_replace('/<\/li>/i', '\\r\\n', $ny_tekst);
  $ny_tekst = preg_replace('/<\/ul>/i', '\\r\\n', $ny_tekst);
  $ny_tekst = preg_replace('/<p>/i', '', $ny_tekst);
  $ny_tekst = preg_replace('/<\/p>/i', '\\r\\n', $ny_tekst);

Så vil

  $ny_tekst = preg_replace('/<(ul|p)>/i', '', $tekst);
  $ny_tekst = preg_replace('/<li>/i', '- ', $ny_tekst);
  $ny_tekst = preg_replace('/<\/(li|ul|p)>/i', '\\r\\n', $ny_tekst);

Gøre det samme
Avatar billede sw_red_6 Nybegynder
04. december 2006 - 16:25 #6
alle tiders med den sammentrækning, jeg er håbløs til regular expressions.
mht * og _ så vil jeg lige prøve at kigge på det.
Avatar billede sw_red_6 Nybegynder
04. december 2006 - 16:28 #7
kunne du evt. besværes med at lave noget lign. med <strong>, </strong>?
de skal jo begge laves om til *
Avatar billede jensgram Nybegynder
04. december 2006 - 22:53 #8
...
  $ny_tekst = preg_replace('/<\/?strong>/i', '*', $ny_tekst);
Avatar billede sw_red_6 Nybegynder
05. december 2006 - 09:46 #9
alle tiders. nu virker den del af det. Nu mangler jeg bare at få fed og kursiv skrift til at virke. * og _ virkede ikke, men er der nogen andre forslag til hvordan den kan lade sig gøre?
Avatar billede jensgram Nybegynder
05. december 2006 - 12:13 #10
Nej, desværre. Frygtede også at det var programspecifikke "standarder"...
Avatar billede sw_red_6 Nybegynder
07. december 2006 - 09:04 #11
hm, det er der så ikke noget at gøre ved.
Nu har jeg så fundet ud af at jeg skal have fjernet en <span style="font-family: Arial"> hvor indholdet af den style er ukendt. Hvordan pokker gør jeg det?
Avatar billede jensgram Nybegynder
07. december 2006 - 09:59 #12
$ny_tekst = preg_replace('/<\/?span[^>]*>/i', '', $ny_tekst);
Avatar billede jensgram Nybegynder
07. december 2006 - 10:00 #13
Dvs. $ny_tekst = preg_replace('/<(ul|p|\/?span[^>]*)>/i', '', $tekst);

I stedet for $ny_tekst = preg_replace('/<(ul|p)>/i', '', $tekst);
Avatar billede jensgram Nybegynder
19. december 2006 - 16:43 #14
Noget nyt?
Avatar billede sw_red_6 Nybegynder
20. december 2006 - 09:20 #15
Jeg takker for hjælpen.
hvis der bliver lagt et svar så får vi lukket her..
Avatar billede jensgram Nybegynder
20. december 2006 - 10:43 #16
Bang!
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

IT-JOB

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Analytiker til Security Operationscenter i Cyberdivisionen Hvidovre