Avatar billede wormie Nybegynder
20. marts 2001 - 17:20 Der er 2 kommentarer og
1 løsning

Problemer med pattern i søgemaskine script

Hejsa...

Jeg har lidt problemer med at modificere et script hvor man kan vælge søgemaskine og så trykke søg... Problemet er at hvis man skriver eks. +java +hjælp i søgefeltet kommer det ud som \" java  hjælp\" i søgemaskinen.
I scriptet er en linie
$value =~ tr/+/ /
som jeg formoder erstatter + med mellemrum. Som jeg kan se det bruger søgemaskiner
%2B som tegn for +, hvordan får jeg perl til at udskifte + med %2B?
Prøvede $value =~ tr/+/%2B/ med det resultat at + bliver meget mærkelige tegn...

Se evt. www.alberg.dk hvor scriptet er med $value =~ tr/+/%2B/

På forhånd tak!

Er der forresten nogen der ved hvor man kan finde en god side der skriver lidt om perls utallige streng funktioner + hvordan man opbygger patterns?
Avatar billede jespernaur Nybegynder
20. marts 2001 - 17:40 #1
Du har ganske ret, + bliver erstattet af mellemrum. Men du bør bruge s-operatoren, substitute isf tr (translate), og da + er et specialtegn skal det escapes med \\

Altså:

$value =~ s/\\+/%2B/g;

Mvh
Jesper Naur
Avatar billede jespernaur Nybegynder
20. marts 2001 - 17:42 #2
Se i øvrigt

http://www.eksperten.dk/spm/57350

der var en henvisning til en vistnok ret god artikel.
Avatar billede wormie Nybegynder
20. marts 2001 - 19:03 #3
Takker... Til info kan det nævnes at hele proceduren kom til at se sådan ud:
sub parse_form {
    if ($ENV{\'REQUEST_METHOD\'} eq \'GET\') {
      # Split the name-value pairs
      @pairs = split(/&/, $ENV{\'QUERY_STRING\'});
    }
    elsif ($ENV{\'REQUEST_METHOD\'} eq \'POST\') {
      # Get the input
        read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'});
      # Split the name-value pairs
        @pairs = split(/&/, $buffer);
    }
    else {
        &error(\'request_method\');
    }

    foreach $pair (@pairs) {
        ($name, $value) = split(/=/, $pair);
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(\"C\", hex($1))/eg;
        $value =~ s/\\+/%2B/g;
        $value =~ s/<!--(.|\\n)*-->//g;
        $contents{$name} = $value;
  }
}

Ikke at jeg helt forstår koden, men det kan være artiklen kan hjælpe :-)
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