Autor Zpráva
Fanda
Profil *
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ěď
Fanda
Profil *
Prosím o pomoc, do teď se mi to nepodařilo vyřešit. :(
Jan Tvrdík
Profil
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 *
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>
A poté jsem ještě zkoušel přidat do php
setlocale(LC_ALL, 'cs_CZ.UTF-8');
Tori
Profil
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
Fanda:
Vypíše to "int 1".
Takže řetězec "Lukáš" taky projde.
Jaký konkrétně vstup neprojde?
Marek88
Profil
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 *
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
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 *
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 *
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

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: