Autor | Zpráva | ||
---|---|---|---|
Fix Profil |
#1 · Zasláno: 14. 6. 2008, 13:08:36
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 |
#2 · Zasláno: 14. 6. 2008, 13:42:38
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 |
#3 · Zasláno: 14. 6. 2008, 14:12:33
<?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 |
#4 · Zasláno: 14. 6. 2008, 15:05:23
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 * |
#5 · Zasláno: 14. 6. 2008, 16:50:36
Jenze on mi ten backslash nesezere, napise to tam proste jako dalsi znak \. Jak to mam vyresit ? Je na to nejaka FCE ?
|
||
anode Profil |
#6 · Zasláno: 14. 6. 2008, 17:28:01 · Upravil/a: anode
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); |
||
Časová prodleva: 16 let
|
0