Avatar billede jfl Nybegynder
24. oktober 2002 - 14:09 Der er 5 kommentarer og
1 løsning

mail header som fylder mere end 1 linie

Jeg har brug for en regular expression som fanger alle mail headers. Dette er nemt hvis hver header er afsluttet med linieskift, men nogle kører videre på flere linier. For dem der kører over flere linier starter de resterende linier med white-space.
Hvordan klarer jeg den?

Nedenstående Php funktion kan klare headers på 1 linie.

function mail_parse_header ($header_str) {
    $headers = array();
    if (preg_match_all("/^([a-z\-]+):(.*)$/Umis", $header_str, $header_array)) {
        while (list($key, $val) = each($header_array[2])) {
            $headers[$header_array[1][$key]] = $val;
        }
        return $headers;
    }
    return false;
}
Avatar billede razor Nybegynder
24. oktober 2002 - 14:23 #1
Avatar billede morten_grouleff Nybegynder
24. oktober 2002 - 14:26 #2
$header_str = preg_replace("/[\n\r]+\s+/", " ", $header_str);

Erstatter alle de "unødvendige" linieskift med en space. Så burde din kode virke uændre.
Avatar billede jfl Nybegynder
24. oktober 2002 - 14:51 #3
razor: imap-rfc822-parse-headers() returnerer ikke alle headers, men bortset fra det er den fed.

morten: hmmmm, du gav mig en idé...
Avatar billede jfl Nybegynder
24. oktober 2002 - 16:01 #4
morten: kan man ikke modificere din version til kun at lave linieskift hvis der ikke efter linieskift findes ^[a-z\-]+:

http://cr.yp.to/immhf/field.html
Avatar billede morten_grouleff Nybegynder
24. oktober 2002 - 16:40 #5
Det er det, der står. Den burde kun udskifte linieskift, der efterfølges af whitespace. med et space. Virker det ikke?
Avatar billede jfl Nybegynder
25. oktober 2002 - 08:27 #6
Hvis jeg ændrede \s (whitespace) til [ |\t] virkede det. Tak :)

function mail_parse_header ($header_str) {
    $header_str = preg_replace("/[\n\r]+[ |\t]+/", " ", $header_str);
    $headers = array();
    if (preg_match_all("/^([a-z\-]+):(.*)$/Umis", $header_str, $header_array)) {
        while (list($key, $val) = each($header_array[2])) {
            $headers[$header_array[1][$key]] = $val;
        }
        return $headers;
    }
    return false;
}
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
Kurser inden for grundlæggende programmering

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