Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  11 4830
Sikkerhetsklarert
Trenger å url encode strenger slik at norske bokstaver fungerer mot en sms gateway.

Url_encode() av "Æ" gir meg "%C3%86" ( noe som er feil, stor Æ skal være "%C6"

%C3%86 gir "A?" i sms.

Forsøker jeg manuelt å encode norske tegn iht til linken nedenfor, så fungerer det fint.

Hva får php sin url_ecode() til å oversette feil?

http://www.degraeve.com/reference/urlencoding.php
Sist endret av Pjukern; 30. mai 2017 kl. 11:34.
<?php echo 'VIF'; ?>
datagutten's Avatar
Donor
Ettersom du får to tegn er ting som tyder på at problemet er relatert til UTF-8 som bruker flere byte per tegn. Prøv å kjør en utf8_decode() på teksten før du sender den til urlencode().
Sikkerhetsklarert
Trådstarter
Men jeg kan ikke utf8 decode en streng som ikke er encodet først?
Virker som at url_encode returnerer utf8 encodet resultat.
Overskuddsmateriell
PHP fila di er nok encodet som Latin1, mens inputen din er UTF-8 som du url_encoder som datagutten sier. Du må enten konvertere over til latin1 før du bruker url_encode eller sikkre at inputen din er latin1 ved å definere det der du får dataene dine fra
<?php echo 'VIF'; ?>
datagutten's Avatar
Donor
Når du får to byte av et tegn må det være UTF-8 eller en annen encoding som bruker multibytetegn.
Du kan sjekke encoding av filen din med notepad++ og strengen med mb_detect_encoding().
Strengt tatt er %C3%86 "riktig" ettersom UTF-8 som regel er den ønskelige måten å håndtere tekst på. Hvis ikke får man et mareritt av charset-konverteringerer å tenke på. Men strengen din ER UTF-8, så datagutten har rett.

Se også https://stackoverflow.com/questions/...-issue#9295134
Sikkerhetsklarert
Trådstarter
Stemte det. Får riktig resultat om jeg kjører utf8_decode(urlencode($str));

Jeg fatter bare ikke hvor utf8 kom inn i bildet.
Overskuddsmateriell
Vet ikke hvor du får dataene dine fra så det kan ikke vi svare på, men enedel tjenester velger UTF-8 om de ikke får besked om å bruke noe annet eks nettlesere.
Sikkerhetsklarert
Trådstarter
Data får jeg fra text area i html forms.
Da sendes nok HTML-skjemaet inn som UTF-8. Og det synes jeg du skal fortsette med.
Overskuddsmateriell
Da bør du ta en titt på denne. Jeg er uenig med fuzzy76. Enten må du definere i HTML at det er og skal brukes Latin1 ellers må du konvertere PHP fila di til UTF8. At du må konvertere inputen er en veldig dårlig løsning.

Hvordan du setter charset i HTML finner du her:
https://www.w3schools.com/html/html_charset.asp

Hvordan du konverterer PHP fila varierer fra editor til editor. I notepad++ har du en egen encode meny du kan bruke.
Sitat av Bullhill Vis innlegg
Da bør du ta en titt på denne. Jeg er uenig med fuzzy76. Enten må du definere i HTML at det er og skal brukes Latin1 ellers må du konvertere PHP fila di til UTF8. At du må konvertere inputen er en veldig dårlig løsning.
Vis hele sitatet...
Dette har vel ingenting med enkodingen til tekstfilen som php-koden er skrevet i, men skyldes nok heller at den mottakende SMS-gatewayen ikke er satt opp til å dekode den URL-enkodede teksten som UTF-8.

HTML5 sitt standard charset er UTF-8, og PHPs urlencode() oversetter helt riktig i henhold til reglene for URL-enkoding av UTF-8. Det er ingen grunn til å bruke noe annet. At SMS-gatewayen ikke støtter det, kommer man seg enkelt rundt ved å først enkode til Latin 1, som vi ser over. (Forutsatt, selvsagt, at brukeren kun har skrevet inn tegn som eksisterer i Latin 1, men den risikoen løper man vel åkkesom.)