Avatar billede perh Juniormester
02. oktober 2022 - 10:33 Der er 7 kommentarer og
1 løsning

urldecode viser ikke æøå mm på utf8 html side

jeg har flyttet et site til en anden server og skiftet alle sider til charset utf8
jeg overfører info i url fra et program i PERL: som side.html?blablaæøåbla
urldecode på websiden har tidligere vist æøå mm korrekt ved en php urldecode.
Men nu bliver de gengivet som ukendt symbol sort tegn med spørgsmåltegn.

på modtagende html-side bruger jeg:
<?php $var = urldecode($_SERVER['QUERY_STRING']);?>

har også prøvet
<?php $var = urldecode(utf8_encode($_SERVER['QUERY_STRING']));

Jeg skal måske utf8 encode det overførte før afsendelsen i PERL, men jeg synes PERL er noget kompliceret?
Avatar billede arne_v Ekspert
02. oktober 2022 - 17:34 #1
Hvordan ser URLøen faktisk ud?

Er ø %f8 eller %c3%b8?
Avatar billede bvirk Professor
02. oktober 2022 - 17:49 #2
hvis der i browsers adresslinie skrives

side.php?æbler=øl&face=💇

vil browseren urlencode det,  så, om requestet i php på webserveren, er det sandt at:

$_SERVER['QUERY_STRING'] == %C3%A6bler=%C3%B8l&face=%F0%9F%92%87

Det er query string encoding og ikke utf-8

Hvis PERL skal requeste side.php, skal det urlencode for det er ikke legalt at sende andet end
side.php?%C3%A6bler=%C3%B8l&face=%F0%9F%92%87

og i php skal det være sandt at

$_SERVER['QUERY_STRING'] == '%C3%A6bler=%C3%B8l&face=%F0%9F%92%87'

Hvorfor det virkede før, men nu ikke længere ved jeg ikke, men check værdien af  $_SERVER['QUERY_STRING'] og få PERL til at urlencode rigtigt.

Jeg kender desværre heller ikke PERL, men hvis du kan identificere hvor der requestes så er urlencode ikke svær at prøve at tilføre.
https://code.activestate.com/recipes/577450-perl-url-encode-and-decode/
Avatar billede bvirk Professor
02. oktober 2022 - 18:13 #3
Måske har jeg helt ramt det - kan se at browser adresselinen urlencoder utf-8 repræsentationen af
    æbler=øl&face=💇
æ har code point U+00E6 ~ binært 1110 0110
i det område bliver code point puttet ind i 2 bytes således:
110xxxxx     10xxxxxx    
11000011        10100110  ~ hex c3a6
https://en.wikipedia.org/wiki/UTF-8

Så måske er det PERL får ikke konsistent med opfattelsen det der skal querystring decodes, altså PERL encoder godt nok, men fra iso-8859

Hvem har sagt det skull være let ;)
Avatar billede perh Juniormester
02. oktober 2022 - 19:36 #4
Desværre  vises ø kun som %f8 , men det skal jo være %c3%b8

Jeg har på nogen ældre sider brugt java script:
var snavn = unescape(location.search.substring(1))
og det VIRKER (!)?

Jeg har også indsat urlizer fra linket i Perl scriptet, men det gør ingen forskel - også selv om jeg indsætter  æøåÆØÅ

sub urlize {
my ($rv) = @_;
$rv =~ s/([^A-Za-zæøåÆØÅ0-9])/sprintf("%%%2.2X", ord($1))/ge;
return $rv;
}
Avatar billede arne_v Ekspert
03. oktober 2022 - 00:54 #5
Hvordan virker:

$var = utf8_encode(urldecode($_SERVER['QUERY_STRING']));

?

Det er ikke nogen god løsning, men ....
Avatar billede perh Juniormester
03. oktober 2022 - 08:35 #6
Det virker !
jeg takker mange gange,

nu må jeg så i gang med at rette alle sider, men jeg vil lige høre om der også er nogle PERL eksperter, der kan hjælpe med at få afsendt en utf-streng.
Jeg kunne ikke lige finde en PERL gruppe her?
Avatar billede arne_v Ekspert
03. oktober 2022 - 14:02 #7
Jeg vil mene at det er bedre at fixe på Perl. siden.

En kommentar som:

// this utf8_encode call should not be necessary and are only here due to a bug in the other script
// important: this will break things if the bug in the other script ever get fixed

ser ikke pæn ud.

:-)
Avatar billede arne_v Ekspert
03. oktober 2022 - 14:04 #8
Med hensyn til Perl, URL encode og UTF-8 så ser:

https://metacpan.org/pod/URL::Encode

relevant ud.
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

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