Kom ihåg mig?
Home Menu

Menu


utf-8 url_decode php

 
Ämnesverktyg Visningsalternativ
Oläst 2009-06-09, 22:51 #1
CarlFredrikHeros avatar
CarlFredrikHero CarlFredrikHero är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2009
Inlägg: 6
CarlFredrikHero CarlFredrikHero är inte uppkopplad
Nykomling
CarlFredrikHeros avatar
 
Reg.datum: Jun 2009
Inlägg: 6
Jag jobbar på nästa version och jobbar på ett av de största problemen med den nuvarande versionen.

Webbplatsen ska använda UTF-8 och bygger till stor del på en sökruta.

Det är viktigt att webbplatsen klarar av att hantera dessa två typer av sökningar:
Det översta alternativet har jag lyckats med så det jag behöver är en funktion som avkodar urler korrekt.

header(), meta-taggen samt mitt program (Notepad++) är inställt på UTF-8.

Tacksam för all hjälp!

Carl-Fredrik Herö,
vemringde.se
CarlFredrikHero är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-09, 23:03 #3
CarlFredrikHeros avatar
CarlFredrikHero CarlFredrikHero är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2009
Inlägg: 6
CarlFredrikHero CarlFredrikHero är inte uppkopplad
Nykomling
CarlFredrikHeros avatar
 
Reg.datum: Jun 2009
Inlägg: 6
De funktionerna är tyvärr oanvändarbara med UTF-8. De förutsätter ISO-8859-1 och ger väldigt konstiga resultat med UTF-8.

Har dessutom försökt att först konvertera till ISO-8859-1 för att sen köra urldecode-funktionen, det funkar inte heller tyvärr.
CarlFredrikHero är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-09, 23:10 #4
Jimpsson Jimpsson är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 428
Jimpsson Jimpsson är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 428
Testa följande:
* Spara filen som UTF-8 (Utan BOM)
* Sätt header, om du inte gjort det. header("Content-type: text/html; charset=utf-8");

Testa sedan url_decode.

Funkar det ändå inte, pröva då denna funktion (hittade på php.net):
Citat:

function utf8_urldecode($str) {
$str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));
return html_entity_decode($str,null,'UTF-8');;
}
Jimpsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-09, 23:42 #5
CarlFredrikHeros avatar
CarlFredrikHero CarlFredrikHero är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2009
Inlägg: 6
CarlFredrikHero CarlFredrikHero är inte uppkopplad
Nykomling
CarlFredrikHeros avatar
 
Reg.datum: Jun 2009
Inlägg: 6
Filen är sen tidigare satt UTF-8 (testade även utan BOM)
header är satt till UTF-8 och även <meta>-taggen

Testade ditt script men allt jag får är sm�r.

Bifogar min testfil, den som vill får gärna testa och göra förändringar (ändra filändelsen till .php).
Bifogade filer
Filtyp: ibf post-4-1244583759.ibf (729 bytes, 18 visningar)
CarlFredrikHero är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-09, 23:48 #6
Jimpsson Jimpsson är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 428
Jimpsson Jimpsson är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 428
Testade exakt den kod du postade här ovan på min server och det fungerar som det ska, har ingen aning om vad som felar för dig då faktiskt.
Jimpsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-10, 08:36 #7
WoxAnYv WoxAnYv är inte uppkopplad
Medlem
 
Reg.datum: Dec 2008
Inlägg: 84
WoxAnYv WoxAnYv är inte uppkopplad
Medlem
 
Reg.datum: Dec 2008
Inlägg: 84
Citat:
Originally posted by CarlFredrikHero@Jun 10 2009, 00:42
Filen är sen tidigare satt UTF-8 (testade även utan BOM)
header är satt till UTF-8 och även <meta>-taggen

Testade ditt script men allt jag får är sm�r.

Bifogar min testfil, den som vill får gärna testa och göra förändringar (ändra filändelsen till .php).
Lägg till följande efter att du läst in get:en

Kod:
$q = mb_convert_encoding($q, 'utf-8','iso-8859-1');
Då borde det se bra ut, det konverterar strängen då till utf-8, frågan är bara hur den då hanterar saker och ting som råkar komma i andra format än iso-8859-1 förstås. Så det får du kika närmare på men ja, det är ett steg mot en lösning.
WoxAnYv är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-10, 12:49 #8
CarlFredrikHeros avatar
CarlFredrikHero CarlFredrikHero är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2009
Inlägg: 6
CarlFredrikHero CarlFredrikHero är inte uppkopplad
Nykomling
CarlFredrikHeros avatar
 
Reg.datum: Jun 2009
Inlägg: 6
Tack WoxAnYv! Det är helt klart mb_convert_encoding som fixade biffen.

Men, som du också säger så funkar den inte om söksträngen redan är UTF-8.

Sökningen http://vemringde.se/?q=smör blir då fel istället. Finns det någon funktion som kan identifiera en söksträngs Charset?
CarlFredrikHero är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-10, 14:17 #9
CarlFredrikHeros avatar
CarlFredrikHero CarlFredrikHero är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2009
Inlägg: 6
CarlFredrikHero CarlFredrikHero är inte uppkopplad
Nykomling
CarlFredrikHeros avatar
 
Reg.datum: Jun 2009
Inlägg: 6
Nu har jag skrivit en egen funktion som letar efter åäö plus lite andra liknande tecken. Det verkar som om det fungerar men jag undrar om jag har glömt något tecken?

Testa gärna scriptet och tala om vad ni tycker!
Bifogade filer
Filtyp: ibf post-4-1244636244.ibf (1.1 KB, 20 visningar)
CarlFredrikHero är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-11, 15:30 #10
SimonPs avatar
SimonP SimonP är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2006
Inlägg: 832
SimonP SimonP är inte uppkopplad
Mycket flitig postare
SimonPs avatar
 
Reg.datum: May 2006
Inlägg: 832
Jag har haft likande problem förut, denna kod löser ditt problem på ett bättre sätt:

Kod:
<?php
header("Content-type: text/html; charset=utf-8");
 
function is_utf8($string)
{
 * /* From http://w3.org/International/questions/qa-f...orms-utf-8.html */
	return preg_match('%^(?:[\x09\x0A\x0D\x20-\x7E]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$%xs', $string);
} 
 
$q = urldecode($_GET['q']);
if (!is_utf8($q)) $q = utf8_encode($q);

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang="sv" lang="sv"> 
	<head> 
 *<title>UTF-8 url decode test</title>
 *<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	</head>
<body>
<?php 
echo "Q = $q<br>"; 
?>
<form method="GET" ><input name="q" value=""><input type="submit"></form>
</body>
</html>
Har kört skriptet ovan på både Windows och Linux servrar.
SimonP är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 21:14.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017