Autor Zpráva
Jan Ježek
Profil *
Kvůli mod_rewrite potřebuji odstranit diakritiku z názvů článků. Jde mi o tohle:

název článku > nazev-clanku

Je také potřeba ošetřit vkládání znaků jako tečky, vykřičníky atp.

Mohl byste mi někdo pomoct nebo mě odkázat na dobrý zdroj? Spíš bych uvítal pomoc, je potřeba to udělat co nejrychleji a nemám čas to studovat. Děkuji
kaifman
Profil

function iso2ascii($text)
{
return strtr($text,
"áčďéěíľňóřšťúůýžÁČĎÉĚÍĽŇÓŘŠŤÚŮÝŽ",
"acdeeilnorstuuyzACDEEILNORSTUUYZ");
}
Jan Ježek
Profil *
Děkuji, ale ještě bych poteboval nějak ošetřit ty tečky a vykřičníky.
hw3
Profil
Jan Ježek: ještě bych to projel (například) funkcí Str_Replace pro nahrazení různých znaků pomlčkami, či "ničím":

function iso2ascii($text)
{
$return = strtr($text,
"áčďéěíľňóřšťúůýžÁČĎÉĚÍĽŇÓŘŠŤÚŮÝŽ",
"acdeeilnorstuuyzACDEEILNORSTUUYZ");
$return = Str_Replace(Array(" ", "_"), "-", $return); //nahradí mezery a podtržítka pomlčkami
$return = Str_Replace(Array("(",")",".","!",",","\"","'"), "", $return); //odstraní ().!,"'
$return = StrToLower($return); //velká písmena nahradí malými.
return $return;
}
Jan Ježek
Profil *
function iso2ascii($text) {
$return = strtr($text,
"áčďéěíľňóřšťúůýžÁČĎÉĚÍĽŇÓŘŠŤÚŮÝŽ",
"acdeeilnorstuuyzACDEEILNORSTUUYZ");

$return = Str_Replace(Array(" ", "_"), "-", $return); //nahradí mezery a podtržítka pomlčkami
$return = Str_Replace(Array("(",")",".","!",",","\"","'"), "", $return); //odstraní ().!,"'
$return = strtolower($return);
return $return;
}

Takhle je to úplně nejlepší. Tedy teoreticky. V praxi mi odstraní dikritiku jen pokud je na písmenem čárka. Háčky a kroužky to nedokáže odstranit. Co s tím? Jsem zoufalý.... Je to nastavením PHP?
hw3
Profil
V jakém kódování jsou data, která chcete ošetřit? Není to v UTF-8? Houby o tom vím, ale mám pocit, že by mohl být problém v tom.
Jan Ježek
Profil *
Chci to pro svůj volně dostupný redakční sytém Webcreator, takže by to mělo být nezávislé na verzi a nastavení PHP.
Jan Ježek
Profil *
O kódování také nic nevím. Soubory jsou v CP1250, kódování windows-1250. Chci to pro svůj volně dostupný redakční sytém Webcreator, takže by to mělo být nezávislé na verzi a nastavení PHP.
hw3
Profil
Zkuste použít tuto upravenou fci:

function utf2ascii($text)
{
$return = Str_Replace(
Array("á","č","ď","é","ě","í","ľ","ň","ó","ř","š","ť","ú","ů","ý ","ž","Á","Č","Ď","É","Ě","Í","Ľ","Ň","Ó","Ř","Š","Ť","Ú","Ů","Ý","Ž") ,
Array("a","c","d","e","e","i","l","n","o","r","s","t","u","u","y ","z","A","C","D","E","E","I","L","N","O","R","S","T","U","U","Y","Z") ,
$text);
$return = Str_Replace(Array(" ", "_"), "-", $return); //nahradí mezery a podtržítka pomlčkami
$return = Str_Replace(Array("(",")",".","!",",","\"","'"), "", $return); //odstraní ().!,"'
$return = StrToLower($return); //velká písmena nahradí malými.
return $return;
}

Teď by to TEORETICKY mělo fungovat. Str_Replace prý nevadí kódování UTF.
UPDATE: pardon, nevšiml jsem si vaší odpovědi. zkuste to tedy, ale asi to nepomůže
Jan Ježek
Profil *
Něco u mě musí být špatně. Když tím proženu tyto písmena:

ěščřžýáíéúů

Vrátí toto:

ěsčřzýaieuů

U některých písmen to fuguje, a jiných ne....
Acci
Profil
http://halogan.xblog.cz/archiv/2005/08/php-prakticky-generovani-seo-ur i
Jan Ježek
Profil
Nechápu to, ale tohle také vůbec nefunguje. Nevrací mi to vůbec nic :(
hw3
Profil
Jan Ježek: jj, to mě taky ne. Nechápu to. (Zkoušeno u mě na localhostu Apache/2.0.54 (Debian GNU/Linux) mod_python/3.1.3 Python/2.3.5 PHP/4.3.10-16 mod_perl/1.999.21 Perl/v5.8.4, i na Webzdarma)
Avšak stejně myslím, že by to nevyřešilo ten problém se znaky.
Acci
Profil
Když jsem to zkoušel, taky mi to nefungovalo, ale myslel jsem si, že něco dělám blbě já.
Jan Ježek
Profil
Na PHP5 to nefunguje, an ty znaky to neřeší.... To je konec.
llook
Profil
Já používám tohle:
/**

* @param string $title
* @return string
*/
function title2pagename($title) {
static $convertTable = array (
'á' => 'a', 'Á' => 'A', 'ä' => 'a', 'Ä' => 'A', 'č' => 'c',
'Č' => 'C', 'ď' => 'd', 'Ď' => 'D', 'é' => 'e', 'É' => 'E',
'ě' => 'e', 'Ě' => 'E', 'ë' => 'e', 'Ë' => 'E', 'í' => 'i',
'Í' => 'I', 'ï' => 'i', 'Ï' => 'I', 'ľ' => 'l', 'Ľ' => 'L',
'ĺ' => 'l', 'Ĺ' => 'L', 'ň' => 'n', 'Ň' => 'N', 'ń' => 'n',
'Ń' => 'N', 'ó' => 'o', 'Ó' => 'O', 'ö' => 'o', 'Ö' => 'O',
'ř' => 'r', 'Ř' => 'R', 'ŕ' => 'r', 'Ŕ' => 'R', 'š' => 's',
'Š' => 'S', 'ś' => 's', 'Ś' => 'S', 'ť' => 't', 'Ť' => 'T',
'ú' => 'u', 'Ú' => 'U', 'ů' => 'u', 'Ů' => 'U', 'ü' => 'u',
'Ü' => 'U', 'ý' => 'y', 'Ý' => 'Y', 'ÿ' => 'y', 'Ÿ' => 'Y',
'ž' => 'z', 'Ž' => 'Z', 'ź' => 'z', 'Ź' => 'Z',
);
$title = strtolower(strtr($title, $convertTable));
$title = preg_replace('/[^a-zA-Z0-9]+/u', '-', $title);
$title = str_replace('--', '-', $title);
$title = trim($title, '-');
return $title;
}
Myslím, že pro středoevropské použití by to mělo stačit.
Jan Ježek
Profil
Mělo, ale při vložení č ho nahradí -269-. Nechápu jak je to možné. I přesto děkuji, je to lepší než dřív.
hw3
Profil
llook: To mi sice funguje, ale nevím, jestli to vyřeší ten problém se znaky J.Ježka.
Jan Ježek: Pokud už jste (neúspěšně) vyzkoušel řešení llooka, tak mě ještě napadá:
jakým způsobem zkoušíte funkčnost té původní funkce? vkládáte to do samostatného skriptu, či to zkoušíte odesílat nějak přes formulář? IMHO by totiž mohl být problém v tom, že skript jako takový není napsán v codepage Windows-1250 (ale předpokládám, že je, pokud to tvoříte ve Win). Nebo (což je pravděpodobnější) není kódování uvedeno v hlavičce skriptu:

<?php
header("Content-Type: text/html; charset=windows-1250");
...
?>

(ale jenom hádám!). A ještě: zkoušíte to u sebe na lokálu nebo na Webzdarma?
Nezapomeňte ale určitě ozkoušet to llookovo řešení.
Jan Ježek
Profil

static $convertTable = array (

'-269-' => 'c',

);


Jinak si už neumím poradit. Může to dělat problémy, ale hlavně že to nějak funguje.
Jan Ježek
Profil
To snad né. Bylo to tou hlavičkou... Díky všem
hw3
Profil
Jan Ježek: Super! Jsem rád, že se nám to nakonec podařilo vyřešit :-)
Polaroid
Profil
to Hagon: no tak
halogan
Profil
to all: prominte ze taham stare zalezitosti, ale moje funkce mi funguje zcela bez problemu na PHP 5. Zkuste si prekontrolovat:
1. Podporu mbstring
2. Nastaveni mb_internal_encoding

Vice popsano v clanku.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0