Autor | Zpráva | ||
---|---|---|---|
Fanda Profil * |
#1 · Zasláno: 17. 6. 2012, 00:04:10
Ahoj,
mám problém s následujícím výrazem: if(preg_match("#^[A-ZŠČŘŽŤĎŇÝÁÍÉÚÓ]?[a-zěščřžýáíéůťďň]{".$min_znaku.",".$max_znaku."}$#iu", $vstup)) Podle mě by měli projít všechny texty typu "Pavel; petr; Lukáš; vítek", ale projde jenom "Pavel, petr". Používám Wamp server s PHP 5.4.3. Kódování mám UTF-8 a v tom bude asi problém. Dočetl jsem se že pro kompatibilitu s UTF-8 se přidá modifikátor "u", ale to nepomáhá. Ještě jsem našel návrh, že problém by mohl být kompilací knihovny PCRE, kde se může zkompilovat bez podpory UTF-8. S překompilováním nemám ve Windows 7 zkušenosti tak nemohu vyzkoušet a ani nevím jak zjistit jestli to bylo dobře zkompilováno. Děkuji za odpověď |
||
Časová prodleva: 19 dní
|
|||
Fanda Profil * |
#2 · Zasláno: 5. 7. 2012, 13:02:00
Prosím o pomoc, do teď se mi to nepodařilo vyřešit. :(
|
||
Jan Tvrdík Profil |
#3 · Zasláno: 5. 7. 2012, 15:43:12
Fanda:
Co ti vypíše následující kód? <?php $in = "Lukáš"; $min_znaku = 3; $max_znaku = 20; $res = preg_match("#^[A-ZŠČŘŽŤĎŇÝÁÍÉÚÓ]?[a-zěščřžýáíéůťďň]{".$min_znaku.",".$max_znaku."}$#iu", $in); var_dump($res); |
||
Fanda Profil * |
#4 · Zasláno: 5. 7. 2012, 22:08:51
Vypíše to "int 1". Z toho vyplývá že je chyba v kódování? Při odeslání z prohlížeče mi to neprojede. V HTML hlavičce mám nastaveno UTF-8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title></title> <link href="style/favicon.ico" rel="shortcut icon" type="image/x-icon" /> <link href="style.css" rel="stylesheet" type="text/css"> </head> setlocale(LC_ALL, 'cs_CZ.UTF-8'); |
||
Tori Profil |
#5 · Zasláno: 5. 7. 2012, 23:26:50
Fanda:
„Podle mě by měli projít všechny texty typu "Pavel; petr; Lukáš; vítek", ale projde jenom "Pavel, petr".“ Vy ten vstup ještě nějak rozdělujete a ověřujete jednotlivé části? "Pavel, petr" nemůže projít uvedeným regulárem, protože obsahuje nepovolené znaky (čárku a mezeru). Jinak modifikátor i bych dala pryč - určuje, že se nemá brát ohled na velikost písmen, což vy asi chcete rozlišovat. Zkuste tohle: '#^((^|[,;]\s*)[A-ZŠČŘŽŤĎŇÝÁÍÉÚÓ]?[a-zěščřžýáíéůťďň]{3,20})+$#u' Mělo by projít buď samostatné slovo, anebo více slov oddělených čárkou nebo středníkem za kterým může následovat libovolný počet mezer. Začáteční velké písmeno je nepovinné.
|
||
Joker Profil |
#6 · Zasláno: 6. 7. 2012, 08:03:06
Fanda:
„Vypíše to "int 1".“ Takže řetězec "Lukáš" taky projde. Jaký konkrétně vstup neprojde? |
||
Marek88 Profil |
#7 · Zasláno: 6. 7. 2012, 09:47:17
Fanda:
„Při odeslání z prohlížeče mi to neprojede.“ Jak to odesíláte? Neodesíláte to náhodou z formuláře přes GET? |
||
Fanda Profil * |
#8 · Zasláno: 6. 7. 2012, 13:03:44
Tori:
„Zkuste tohle: '#^((^|[,;]\s*)[A-ZŠČŘŽŤĎŇÝÁÍÉÚÓ]?[a-zěščřžýáíéůťďň]{3,20})+$#u'“ Toto jsem zkoušel, ale boužel mi to nefunkuje. Vstup který by měl projít tak je pouze "Lukáš" bez čárky tak jsem to upravil na '#^([A-ZŠČŘŽŤĎŇÝÁÍÉÚÓ]?[a-zěščřžýáíéůťďň]{3,20})+$#u' a to také boužel nefunkovalo. Joker: > Takže řetězec "Lukáš" taky projde. > Jaký konkrétně vstup neprojde? Problém je v tom že když to zadám přímo do proměnné tak to projde, ale při poslání z prohlížeče pomocí formuláře tento řetězec neprojde. Marek88: „Jak to odesíláte? Neodesíláte to náhodou z formuláře přes GET?“ Používám POST. Konkrétní form: <form method="POST" action="stranka.php"> <label>Jméno:</label> <input type="text" size="20" class="text" name="jmeno" value=""> <input type="submit" name="odeslat" value="Uložit"> </form> Tady přikládám výpis POSTu: Request URL:http://localhost/stranka/stranka.php Request Method:POST Status Code:200 OK Request Headersview source Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:windows-1250,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:cs-CZ,cs;q=0.8 Cache-Control:max-age=0 Connection:keep-alive Content-Length:55 Content-Type:application/x-www-form-urlencoded Cookie:PHPSESSID=hmqe2iaop3pcru9i4sntm9msa3 Host:localhost Origin:http://localhost Referer:http://localhost/stranka/stranka.php User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Iron/19.0.1100.0 Chrome/19.0.1100.0 Safari/536.5 Form Dataview URL encoded jmeno:Lukáš prijmeni:Test odeslat:Uložit Response Headersview source Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection:Keep-Alive Content-Type:text/html; charset=utf-8 Date:Fri, 06 Jul 2012 10:58:56 GMT Expires:Thu, 19 Nov 1981 08:52:00 GMT Keep-Alive:timeout=5, max=100 Pragma:no-cache Server:Apache/2.4.2 (Win64) PHP/5.4.3 Transfer-Encoding:chunked X-Powered-By:PHP/5.4.3 Problém bude asi na tomto řádku: Accept-Charset:windows-1250,utf-8;q=0.7,*;q=0.3 Potřeboval bych tam dostat na první místo UTF-8. HTML hlavička je výše. A je v ní zvolen: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> Možná neumím udělat správně HTML hlavičku... |
||
Mike8748 Profil |
#9 · Zasláno: 6. 7. 2012, 13:17:12
Fanda:
> Problém bude asi na tomto řádku: > > Accept-Charset:windows-1250,utf-8;q=0.7,*;q=0.3 > > > Potřeboval bych tam dostat na první místo UTF-8. není důvod dostávat utf-8 dopředu... ta hlavička říká něco uplně jiného než si myslíš ohledně kódu... co přesně je v $vstup? co tam přirazuješ? možná by stálo za to ukázat celý kód tvého nefunkčního skriptu |
||
Fanda Profil * |
#10 · Zasláno: 6. 7. 2012, 13:40:57 · Upravil/a: Fanda
Přikládám uložení:
if(!empty($_POST['odeslat'])) { $vstup = $_POST['jmeno']; $min_znaku = 3; $max_znaku = 20; if(preg_match("#^[A-ZŠČŘŽŤĎŇÝÁÍÉÚÓ]?[a-zěščřžýáíéůťďň]{".$min_znaku.",".$max_znaku."}$#u", $vstup)) { //Ulozeni dat } else { echo('Špatný formát jména'); // TADY MI SCRIPT SKONCI } } Projde pouze bez diakritiky. |
||
Fanda Profil * |
#11 · Zasláno: 7. 7. 2012, 23:34:06
Tak už se mi to snad povedlo vyřešit. Zde je řádek který mě zachránil:
mb_internal_encoding("UTF-8"); Díky za Vaši pomoc |
||
Časová prodleva: 12 let
|
0