getParam nepředá diakritiku

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Aurielle
Člen | 1281
+
0
-

Zdravím,
snažím se vyřešit kanonizaci URL ze starého webu. Jednak vedou odkazy s prvním písmenem velkým, ty zpracovávám bez problémů. Problém je s parametry na index.php, kde adresa vypadá třeba takto: http://www.runescapewiki.cz/index.php?…. Když v default presenteru odchytím výskyt parametru title a forwardnu na kanonizační action tak to sice funguje, ale z parametru se odstraní veškerá diakritika, takže se místo Hlavní_strana předá Hlavn_strana.

Zkoušel jsem i experimentovat se styly v routách, ale nejsem s nimi moc kamarád. Budu vděčný za rady, díky.

Aurielle
Člen | 1281
+
0
-

Zatím jsem si napsal toto jako walkaround, ale není to moc nette-like:

// Request ve tvaru localhost/runescapewikicz/?title=Hlavní_strana

public function actionDefault()
{
	if($this->getParam('title'))
	{
		// $request = $this->getParam('title'); // $request => 'Hlavn_strana'
		$request = iconv('CP1250', 'UTF-8', $_GET['title']); // $request => 'Hlavní_strana' po převodu na utf-8
		// Debug::dump($_GET['title']) => 'Hlavn\xed_strana'
		$this->forward('Article:compatibility', $request);
	}
}
Ondřej Mirtes
Člen | 1536
+
0
-

Nešlo by to přesměrovávání provést na úrovní one way routeru anebo v .htaccess?

Ale bug to nejspíš je, to jo.

Aurielle
Člen | 1281
+
0
-

Dle různých adres a parametrů (a že jich MediaWiki má požehnaně) budu rozhodovat, na kterou část aplikace přesměruji…

David Grudl
Nette Core | 8228
+
0
-

Aby tohle fungovalo, je potřeba nastavit v bootstrapu

Environment::getHttpRequest()->setEncoding('windows-1250');

nicméně jak jsem to právě prověřoval, tak kvůli jednomu bugu to aktuálně nepomůže. Opravím.