Autor Zpráva
Fix
Profil
Zdravim, mam problem s regulernimi vyrazy - potrebuju postupne nahrazovat z "puvodniho retezce" znaky znakama, ktere jsou na te same pozici v druhem retezci. Pouziju to do friendly url. Jenze je tam problem s par znakama. udelal jsem si aplikaci ktera mi zjistila tohle:

Warning: eregi() [function.eregi]: REG_BADRPT in C:\_webs\B61\fce.php on line 21

Warning: eregi() [function.eregi]: REG_EPAREN in C:\_webs\B61\fce.php on line 21

Warning: eregi() [function.eregi]: REG_EESCAPE in C:\_webs\B61\fce.php on line 21

Warning: eregi() [function.eregi]: REG_BADRPT in C:\_webs\B61\fce.php on line 21

Warning: eregi() [function.eregi]: REG_EMPTY in C:\_webs\B61\fce.php on line 21

Warning: eregi() [function.eregi]: REG_EBRACK in C:\_webs\B61\fce.php on line 21
ABCDEFGHIJKLMNOPQRSTUVWXYZĚŠČŘŽÝÁÍÉÓÚŮĹĽŤĎŇěščřžýáíéóúůĺľťďň+=()§¨!"$\ .,*<>÷ר¸´ˇ˝|€đĐ[]łŁ#&@{} (Puvodni retezec)
abcdefghijklmnopqrstuvwxyzescrzyaieouulltdnescrzyaieouulltdn---------- -------------edd--ll---a- (Zpravny vystup)
abcdefghijklmnopqrstuvwxyzescrzyaieouulltdnescrzyaieouulltdn+-(------\ --*---------|edd[-ll---a- (Vystup)
Na pozici 60 (znak +) neni zpravne nahrazeno - - [[ + != - ]]
Na pozici 62 (znak () neni zpravne nahrazeno - - [[ ( != - ]]
Na pozici 69 (znak \) neni zpravne nahrazeno - - [[ \ != - ]]
Na pozici 72 (znak *) neni zpravne nahrazeno - - [[ * != - ]]
Na pozici 82 (znak |) neni zpravne nahrazeno - - [[ | != - ]]
Na pozici 86 (znak [) neni zpravne nahrazeno - - [[ [ != - ]]
bukaj
Profil
Fix
Podle těch chyb, co to vypisuje, to vypadá na nějaký špatný regulární výraz. Hodilo by se ho znát.
Fix
Profil
<?php

error_reporting(E_ALL);

// Soubor fce.php - knihovna funkcí pouzitych na webu

setlocale(LC_ALL, 'cs_CZ');

function friendly_url($url) {
$delka = strlen ($url);
$pismena = "ABCDEFGHIJKLMNOPQRSTUVWXYZĚŠČŘŽÝÁÍÉÓÚŮĹĽŤĎŇěščřžýáíéóúůĺľťďň+=()§¨!\" \$\\.,*<>÷ר¸´ˇ˝|€đĐ[]łŁ#&@{}";
$nahradit = "abcdefghijklmnopqrstuvwxyzescrzyaieouulltdnescrzyaieouulltdn--------- --------------edd--ll---a-";

$delka1 = strlen ($pismena);
$delka2 = strlen ($nahradit);

if($delka1 == $delka2) {
for($i=0;$i < $delka1;$i++) {
//$pismena[$i] = preg_quote($pismena[$i], '/');
if(eregi($pismena[$i],$url)) {
$url = str_replace ($pismena[$i],$nahradit[$i],$url);
}
}
} else {
die("Byla nalezena chyba ve scriptu pro FriendlyURL. Pole pismena a nahradit nejsou stejne dlouha !");
}

return $url;
}
?>

Tady je tedy zdrojak
nightfish
Profil
některé znaky z toho řetězce se v regulárních výrazech chovají jako metaznaky (+, $, ., [, ], ...), takže je nutno je escapovat
já bych zřejmě použil nějakou lepší metodu, která je schopná se bez regulárních výrazů obejít (třeba strtr() - jen musíš ještě vyřešit malá/velká písmena, ale to by nemusel být takový problém)
fix
Profil *
Jenze on mi ten backslash nesezere, napise to tam proste jako dalsi znak \. Jak to mam vyresit ? Je na to nejaka FCE ?
anode
Profil
Tohle je přesně zápis jako dělaný pro strtr(), jak už psal nightfish výše. Místo celého pomalého for-cyklu stačí jednoduše
strtr($url, $pismena, $nahradit);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: