PHP - iconv() localhost vs server

Programovacie jazyky, rady, poradňa...
Holubar
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3894
Registrovaný: 24 feb 2005, 21:26
Bydlisko: Senec
Kontaktovať používateľa:

PHP - iconv() localhost vs server

Príspevok od používateľa Holubar »

Robim s funkciou, ktora pripravuje adresy URL v ramci SEO optimalizacie, jej kod uvadzam nizsie. Pre nahradenie slovenskych znakov je pouzita funkcia iconv. Na localhoste funguje bez problemov, nahradi spravne vsetky znaky s diakritikou aj dlznami, no na serveri ich odstrani.

Z funkcie som odstranil aj podmienku if aj celu else klauzulu, takze viem, ze iconv je dostupna aj na serveri, len nechapem, preco tam nefunguje rovnako ako na localhoste.

Kód: Vybrať všetko

function seourl($string){
	if( function_exists( 'iconv' )){
		// Verze pro knihovnu iconv.
		$string = iconv( 'utf-8', 'ascii//TRANSLIT//IGNORE', $string);
	}else{
		// Verze bez iconv.
		$sCeskeZnaky =    'ěščřžýáíéóúůďťňĚŠČŘŽÝÁÍÉÓÚŮĎŤŇ';
		$sJejichNahrada = 'escrzzaieouudtnESCRZZAIEOUUDTN';
		$string = strtr( $string, utf8_decode($sCeskeZnaky), $sJejichNahrada );
	}
	
	// Odstraníme všechny znaky, které nejsou a-z, 0-9, mínus, podtržítko nebo mezera.
	$NEakceptovatelneZnaky_regvyr = '#[^-a-zA-Z0-9_ ]#';
	$string = preg_replace( $NEakceptovatelneZnaky_regvyr, '', $string);

	// Odstraníme bílé znaky na začátku a na konci. 
	$string = trim($string);

	// Všechny mínusy, podtržítka a mezery na mínusy.
	$string = preg_replace('#[-_ ]+#', '-', $string);
	$string = strtolower($string);

	// Vrátíme upravený řetězec.
	return $string;
}
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - iconv() localhost vs server

Príspevok od používateľa audiotrack »

používaš (resp. snažíš sa, ale asi ani nevieš čo to znamená) zárove TRANSLIT aj IGNORE. V živote som nevidel použité oboje súčasne (lebo to nemá zmysel keďže sa to navzájom vylučuje), a keby si prečítaš dokumentáciu, zistíš že je dosť nepredvídateľné ktorý flag sa z týchto dvoch spracuje. Niekedy je to prvý, niekedy druhý. Záleží od servera. TRANSLIT znamená že ak sa znak nedá preložiť, použije sa najpodobnejší. IGNORE znamená že ak sa nedá preložiť, tak sa vynechá. Preto ti localhost napríklad používa TRANSLIT kým server používa IGNORE. Daj tam iba jeden z nich a malo by to byť v poriadku
Holubar
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3894
Registrovaný: 24 feb 2005, 21:26
Bydlisko: Senec
Kontaktovať používateľa:

Re: PHP - iconv() localhost vs server

Príspevok od používateľa Holubar »

No praveze som skusal aj bez nich, aj s jedny aj s druhym oddelene, vysledok stale rovnaky - vynecha znaky s diakritikou, pricom na localhoste to funguje pokazde bez problemov.

A ten kod, co som uviedol pochadza priamo z knihy SEO v PHP
http://knihy.cpress.cz/knihy/pocitacova ... esionalne/
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - iconv() localhost vs server

Príspevok od používateľa audiotrack »

skús dať na začiatok niečo ako setlocale(LC_CTYPE, 'sk_SK');
Holubar
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3894
Registrovaný: 24 feb 2005, 21:26
Bydlisko: Senec
Kontaktovať používateľa:

Re: PHP - iconv() localhost vs server

Príspevok od používateľa Holubar »

Skvele, pomohlo to. Dakujem :)
Napísať odpoveď