MeleaMedlem sedan juli 20033 147 inlägg 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&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 Kan det vara ö:et kanske?
MeleaMedlem sedan juli 20033 147 inlägg
@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 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 nåt med charset kanske ? iso-8859-1
MeleaMedlem sedan juli 20033 147 inlägg Den är inställd på iso-8859-1. :l
InsiderMedlem sedan jan. 2000978 inlägg 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 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 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&sSideNavn=S%C3%B6k+recept">
I PHP använder du urlencode(). :)
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 Dåså. :)
Kör med urlencode() nu istället, funkar utmärkt. :)
Tack än en gång!
InsiderMedlem sedan jan. 2000978 inlägg
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 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&sSideNavn=$sSideNavn";
?>
MeleaMedlem sedan juli 20033 147 inlägg 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 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. :)