Avatar billede the_saint Nybegynder
27. marts 2009 - 09:36 Der er 12 kommentarer og
1 løsning

RegExp - Fjerne alle forekomster af <? ?> i en string.

Hej experter.

Hvordan kan jeg fjerne alle forekomster af <? ?> (samt det imellem) på en string.

Jeg har et richtext felt, hvor brugerne har det med at copy/paste dokumenter fra deres word, og word bruger tilsyneladende <? ?> til et eller andet :|

Mvh.
Mikkel
Avatar billede Slater Ekspert
27. marts 2009 - 09:39 #1
preg_replace('/<\?.*?\?>/', '', $subject);
- skulle kunne gøre det.
Avatar billede jakobdo Ekspert
27. marts 2009 - 10:07 #2
Hvis vi snakker strengen som: '<? ?>', så bør du anvende str_replace()
Avatar billede Slater Ekspert
27. marts 2009 - 10:12 #3
Han skriver "samt det imellem".
Avatar billede jensgram Nybegynder
27. marts 2009 - 10:17 #4
Semi-o/t: <? ... ?> er processing instructions i XML, jf. http://www.w3.org/TR/REC-xml/#sec-pi
Avatar billede olebole Juniormester
27. marts 2009 - 10:20 #5
<ole>

Det kan gøres på en del måde. Formodentlig også med:
    $str = substr($str, strpos($str, "?>")+2);

/mvh
</bole>
Avatar billede olebole Juniormester
27. marts 2009 - 10:24 #6
jensgram >> Nej, det er formodentlig XML-deklarationen, der driller:
    http://www.w3.org/TR/REC-xml/#sec-prolog-dtd

Visningen i Word er jo i det store hele bare en browser, så det er sikkert noget XHTML-snask  ;o)
Avatar billede jensgram Nybegynder
27. marts 2009 - 10:33 #7
olebole > Det troede jeg også var en art PI (men kan godt fornemme, at det måske ikke er tilfældet).
Avatar billede the_saint Nybegynder
27. marts 2009 - 14:27 #8
viperine, takker - det ledte mig på rigtige spor.. fandt ud af at det ikke var <? ?> men <? />. Så fik opdateret koden til følgende:

preg_replace('/<\?.*?\//', '', $content)


men har så også udvidet til denne, da <o:p> og </o:p> også skulle fjernes, nogle der ved hvad disse tags er til?

preg_replace('/<\?.*?\/>|<o:p>|<\/o:p>/', '', $content)


Smid et svar viperine :)

olebole > hvad jeg bare lige kan fortolke din funktion til, så vil den jo kun returnere teksten som kommer efter den første ?>, så en tekst såsom:

Hej med <? dig ?>, har du det godt? <? evil_hack(); ?>

ville blive til ", har du det godt? <? evil_hack(); ?>"
Avatar billede Slater Ekspert
27. marts 2009 - 14:43 #9
Svar :)
Avatar billede jensgram Nybegynder
27. marts 2009 - 15:00 #10
oleboles forslag er vist tiltænkt at fjerne XML-deklarationen (som ALTID er det første).
Avatar billede the_saint Nybegynder
27. marts 2009 - 15:37 #11
jensgram > Men i dette tilfælde stod det midt ind i strengen, og var der flere gange :)
Avatar billede jensgram Nybegynder
27. marts 2009 - 17:08 #12
Jep, jeg er med. Forsøgte blot at give mit bud på antagelsen bag oleboles løsning :)

God weekend.
Avatar billede olebole Juniormester
27. marts 2009 - 23:38 #13
jensgram >> og et helt korrekt bud  ;o)
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