since folks around here helped me a lot with my own problems, I want to contribute. I hope my solution will help someone, so here it is:
Middle european countries have a set of special characters like wedge above s: "š" or č, etc. Firefox will show these characters in the address bar correctly, but wait until you hit rock bottom with Internet Explorer (as always). In IE, these special characters are URL-escaped and it looks like binary madness in your address bar. There goes SEO and all your effort.
Needless to say I needed to fix this ugly issue. So I opened lib/general.php and after line 134 added following code:
Code: Select all
/* FIX
Corrects SEO url for mid-european language characters conversion, e.g.: š => s, č => č, etc. Uses static substitution table.
*/
static $tbl = array("\xc3\xa1"=>"a","\xc3\xa4"=>"a","\xc4\x8d"=>"c","\xc4\x8f"=>"d","\xc3\xa9"=>"e","\xc4\x9b"=>"e","\xc3\xad"=>"i","\xc4\xbe"=>"l","\xc4\xba"=>"l","\xc5\x88"=>"n","\xc3\xb3"=>"o","\xc3\xb6"=>"o","\xc5\x91"=>"o","\xc3\xb4"=>"o","\xc5\x99"=>"r","\xc5\x95"=>"r","\xc5\xa1"=>"s","\xc5\xa5"=>"t","\xc3\xba"=>"u","\xc5\xaf"=>"u","\xc3\xbc"=>"u","\xc5\xb1"=>"u","\xc3\xbd"=>"y","\xc5\xbe"=>"z","\xc3\x81"=>"A","\xc3\x84"=>"A","\xc4\x8c"=>"C","\xc4\x8e"=>"D","\xc3\x89"=>"E","\xc4\x9a"=>"E","\xc3\x8d"=>"I","\xc4\xbd"=>"L","\xc4\xb9"=>"L","\xc5\x87"=>"N","\xc3\x93"=>"O","\xc3\x96"=>"O","\xc5\x90"=>"O","\xc3\x94"=>"O","\xc5\x98"=>"R","\xc5\x94"=>"R","\xc5\xa0"=>"S","\xc5\xa4"=>"T","\xc3\x9a"=>"U","\xc5\xae"=>"U","\xc3\x9c"=>"U","\xc5\xb0"=>"U","\xc3\x9d"=>"Y","\xc5\xbd"=>"Z");
$val = strtr($val, $tbl);
$val = strtolower($val);
/*
END OF FIX
*/
function MakeURLNormal($val) seems to do this exact thing but in reverse order. I did not alter this function as I did not notice any error or problem to do so. If someone thinks fn MakeURLNormal needs to be adjusted as well, feel free to discuss or post your working code here.
Spread the word and help others fight such issues. Long live community help
