webForumDet fria alternativet

Valideringsproblem med länk

16 svar · 525 visningar · startad av Melea

MeleaMedlem sedan juli 20033 147 inlägg
#1

Hejhej,

har problem att validera en länk, ser absolut inget fel på den, eller hur man ska fixa till det. Såhär ser länken ut:

<a href="http://www.coop.se/includefiles/MODULER/CCMS/show_page.asp?iMappeID=180&amp;sSideNavn=Sök+recept" target="_blank">Sök recept på Coop</a>

Och felmeddelandet jag får är

W3C skrev:

error: <...> escaping malformed URI reference
Cause:

An URI contains non-authorized characters. Or the quotes around the URI are not closed.

Jag antar att det har med "non-authorized character", men vad är det för tecken som inte är tillåtet?

Tack på förhand

/r Kan ju tillägga att jag kör med denna doctypen:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@ndersMedlem sedan juni 200032 969 inlägg
#2

Kan det vara ö:et kanske?

MeleaMedlem sedan juli 20033 147 inlägg
#3

@nders skrev:

Kan det vara ö:et kanske?

Jag har testat att byta ut ö mot ö men det vill sig ändå inte.

MeleaMedlem sedan juli 20033 147 inlägg
#4

Verkar som det var ö:et som strulade till det, gick in och tog bort det, och nu validerar länken.
Kan man komma undan detta på något sätt? Eller går det inte att ha å ä ö i länkar?

FuelMedlem sedan okt. 20001 285 inlägg
#5

nåt med charset kanske ? iso-8859-1

MeleaMedlem sedan juli 20033 147 inlägg
#6

Den är inställd på iso-8859-1. :l

InsiderMedlem sedan jan. 2000978 inlägg
#7

I en URI tillåts bara tecken som tillhör US-ASCII. Validatorn följer troligen det regelverket.
Man måste ersätta alla övriga tecken med ett decimaltecken samt två hex-värden.
Exempelvis blir ö: "%F6".
http://www.ietf.org/rfc/rfc2396.txt

MeleaMedlem sedan juli 20033 147 inlägg
#8

Det funkar! :)
Jag gjorde en funktion i PHP för att ersätta fel med rätt tecken.
Om det är någon som har samma problem i framtiden.

function url($text) {

	$search = array('å', 'ä', 'ö', 'Å', 'Ä', 'Ö');
	$replace = array('%E5', '%E4', '%F6', '%C5', '%C4', '%D6');
	$text = str_replace($search, $replace, $text);
	return $text;

}

Tack så mycket Insider!

zcorpanMedlem sedan dec. 20042 245 inlägg
#9

Hur får du "ö" till "%F6"? URIer omvandlas till UTF-8, oavsett vilken charset dokumentet använder.

<a href="http://www.coop.se/includefiles/MODULER/CCMS/show_page.asp?iMappeID=180&amp;sSideNavn=S%C3%B6k+recept">

I PHP använder du urlencode(). :)

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#10

Melea skrev:

Det funkar! :)
Jag gjorde en funktion i PHP för att ersätta fel med rätt tecken.
Om det är någon som har samma problem i framtiden.

function url($text) {

	$search = array('å', 'ä', 'ö', 'Å', 'Ä', 'Ö');
	$replace = array('%E5', '%E4', '%F6', '%C5', '%C4', '%D6');
	$text = str_replace($search, $replace, $text);
	return $text;

}

Tack så mycket Insider!

Har inte PHP en riktig URL-encode funktion? Den där funktionen är skräp eftersom den inte klarar av alla specialtecken.

MeleaMedlem sedan juli 20033 147 inlägg
#11

Dåså. :)
Kör med urlencode() nu istället, funkar utmärkt. :)

Tack än en gång!

InsiderMedlem sedan jan. 2000978 inlägg
#12

zcorpan skrev:

Hur får du "ö" till "%F6"?

Jag utgick att det motsvarade ö eftersom FF omvandlar adressen automatiskt när man går in på länken:
http://www.coop.se/includefiles/MODULER/CCMS/show_page.asp?iMappeID=180&sSideNavn=Sök+recept

MeleaMedlem sedan juli 20033 147 inlägg
zcorpanMedlem sedan dec. 20042 245 inlägg
#14

För mig blir det:

http%3A%2F%2Fwww.coop.se%2Fincludefiles%2FMODULER%2FCCMS%2Fshow_page.asp%3FiMappeID%3D180%26sSideNavn%3DS%C3%B6k%2Brecept

...men du ska nog inte urlencoda hela adressen... Det borde se ut ungefär såhär tror jag:

<?php

$iMappeID = urlencode('180');
$sSideNavn = urlencode('Sök+recept');
echo "http://www.coop.se/includefiles/MODULER/CCMS/show_page.asp?iMappeID=$iMappeID&amp;sSideNavn=$sSideNavn";

?>
MeleaMedlem sedan juli 20033 147 inlägg
#15

Hm, okej... Så det är bara på querystringarna man ska köra urlencode? Hur gör jag isåfall om jag har ett länkarkiv i en databas, och ska skriva ut det?

MeleaMedlem sedan juli 20033 147 inlägg
#16

Jag löste det såhär:

$query = parse_url($rows_link['Link']);
$query = urlencode($query['query']);

$pos = strpos($rows_link['Link'], '?');

if($pos == true) {
	$http = explode('?', $rows_link['Link']);
	$http[0] = $http[0].'?';
} else {
	$http[0] = $rows_link['Link'];
}

echo $http[0].$query;

Finns säkert något smidigare sätt att lösa det på, men detta funkade. :)

BromsMedlem sedan sep. 2002188 inlägg
#17

gör om ö till ö kanske?

135 ms totalt · 3 externa anrop · v20260731065814-full.ca5a5675
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)