Avatar billede mrcorex Nybegynder
18. februar 2008 - 11:59 Der er 9 kommentarer

Fjerne linebreaks i et tag.

Hej alle.

Jeg har et stygt problem som jeg simpelthen ikke kan se løsningen på. Hjææælp :)

Jeg skal have fundet/udviklet noget php-kode som fjerne linebreaks fra et tag. Et eksempel:

<item
    attr1="test1"
    attr2="test2">
    <description><![CDATA[<b>This
    is
    a
    test!</b>]]></description>
</item>

Dette eksempel skal ende op med at være:

<item attr1="test1" attr2="test2">
    <description><![CDATA[<b>This
    is
    a
    test!</b>]]></description>
</item>

Er der nogen som ved hvordan den løses????
Avatar billede pidgeot Nybegynder
18. februar 2008 - 12:04 #1
Hvis det, som det lidt ligner, er en XML-fil, så burde du kunne bruge et af de API'er der findes til det for at læse og genskrive filen.

Et startpunkt kunne måske være http://www.php.net/manual/en/ref.dom.php, hvis der er tale om en forholdsvis lille tekst (alt afhængig af din memory_limit).

Det store spørgsmål er måske i virkeligheden hvorfor du skal bruge det. *-)
Avatar billede mrcorex Nybegynder
18. februar 2008 - 12:36 #2
Det er faktisk en xml-fil, men jeg har noget helt specielt jeg skal bruge den til. Jeg skal have lavet en class som håndterer xml. Grunden til hvorfor jeg skriver min egen XML-class, holder jeg for mig selv. Men den er valid nok. :)

Så, er der nogen som kan svare på denne her? :)
Avatar billede jakobdo Ekspert
18. februar 2008 - 14:50 #3
Kunne man ikke dele opgaven op.
Man kunne starte med en regexp, som fandt alle tekster der var imellem:
< og >
Herefter tog den selvsamme tekst og fjerne linebreaks.
Avatar billede jakobdo Ekspert
18. februar 2008 - 14:56 #4
Skud fra hoften, utestet:

$new_xml = preg_replace_callback(
        '/<(.*?)>/s',
        create_function(
            '$matches',
            'return str_replace("\r\n","",$matches[0]);'
        ),
        $xml_input
    );
Avatar billede pidgeot Nybegynder
18. februar 2008 - 15:07 #5
Din tanke er fin, jakob, men du glemmer <![CDATA[-sektionerne, der ikke må ændres - din regex skal på en eller anden måde udelukke alt der står mellem <![CDATA[ og ]]>.

Jeg vil mene at hvis du skriver din egen klasse, så bør du også kunne skrive den så den er bedøvende ligeglad med linjeskift inde i tags UDEN at du skal til at ændre på det du får ind - men det er måske bare mig...
Avatar billede jakobdo Ekspert
18. februar 2008 - 21:38 #6
pidgeot: Ja, den havde jeg sgu lige overset. Ligger hovedet i blød igen. :o(
Avatar billede mrcorex Nybegynder
18. februar 2008 - 22:16 #7
$data indeholder xml-data.

$posStart = strpos($data,"<![CDATA[");
while ($posStart > 0) {
    $posEnd = strpos($data,"]]>",$posStart) + 3;
    $cData = substr($data,$posStart,$posEnd - $posStart);
    $cData = "[[" . urlencode(substr($cData,9,-3)) . "]]";
    $data = substr($data,0,$posStart) . $cData . substr($data,$posEnd);
    $posStart = strpos($data,"<![CDATA[");
}

Her bliver CDATa urlencode'd sådan at når de skal pilles fra hinanden senere hen kan de urldecode's igen.
Avatar billede olebole Juniormester
18. februar 2008 - 23:47 #8
<ole>

Brug PHP's egne XML-funktioner til at rense op i den slags - og brug så derefter dine egne, hvis du mener, det er påkrævet

/mvh
</bole>
Avatar billede mrcorex Nybegynder
14. september 2010 - 13:00 #9
Jeg har nogle åbne spørgsmål har jeg fundet ud af. De skal lukkes. Gider du svare på denne her olebole? Ellers lukker jeg den.
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