Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z odczytaniem polskiego znaku z POST
Forum PHP.pl > Forum > Przedszkole
Astronovi
witam,
przejdę do konkretów:
plik php, kodowanie utf-8
formularz method="post"
pole tekstowe <input type="text" maxlength="30" name="text" size="30" value="" />

po wysłaniu z formularza mam odbiór:

$tablica1=$_POST['text'];
for($i=0; $i<strlen($tablica1); $i++)
{
$znak = $tablica1[$i];
if ($znak== 'ń') print 'ok';
}

wpisuję w formularz wyraz z "ń" i nie ma 'ok'
czy ktoś mi może powiedzieć dlaczego?
nospor
Bo ń to dwa bajty, a ty lecisz forem po jednym bajcie więc w życiu się nie wstrzelisz.
Co tym kodem w ogóle chciałeś osiągnąć?
Astronovi
Cytat(nospor @ 19.10.2011, 11:36:21 ) *
Bo ń to dwa bajty, a ty lecisz forem po jednym bajcie więc w życiu się nie wstrzelisz.
Co tym kodem w ogóle chciałeś osiągnąć?


po prostu sprawdzam czy ktoś wpisał polski znak czy nie....
możesz mi pomóc?
Astronovi
Cytat(nospor @ 19.10.2011, 11:47:43 ) *


nie działa za bardzo... sad.gif

próbowałem zakodować znak ń

$tekst=$_POST['text'];
$eee = bin2hex($tekst[0]);
if($eee=='c584') print 'ok';

nie chodzi o sam znak ń...ogólnie o wykrywanie polskich znaków w tekscie
nospor
Cytat
nie działa za bardzo...
To pokaz jak użyłeś tej funkcji.
Astronovi
Cytat(nospor @ 19.10.2011, 12:46:43 ) *
To pokaz jak użyłeś tej funkcji.



$tablica1 = $_POST['text']
for($a=0; $a<strlen($tablica1); $a++)
{
$znak = $tablica1[$a];
$szuk = 'ń';
$spr = mb_strpos($znak, $szuk);
if ($spr !== false) print 'ok';
}
nospor
1) ZAcznij używać bbcode
2)mb_strpos() - zajrzałeś w ogóle do linka co ci podałem? Tu się szuka w tekscie a nie w bajcie tekstu.
Astronovi
Cytat(nospor @ 19.10.2011, 13:01:36 ) *
1) ZAcznij używać bbcode
2)mb_strpos() - zajrzałeś w ogóle do linka co ci podałem? Tu się szuka w tekscie a nie w bajcie tekstu.


ok poradziłem sobie inaczej, ale dzięki nospor

nospor
No to napisz jak. Nie bądź egoistą. Niech potomni którzy natrafią na ten wątek też skorzystają.
Astronovi
Cytat(nospor @ 19.10.2011, 13:17:12 ) *
No to napisz jak. Nie bądź egoistą. Niech potomni którzy natrafią na ten wątek też skorzystają.


FINALNIE:

$tablica1=$_POST['text'];

for($i=0; $i<strlen($tablica1); $i++)
{
if(ord($tablica1[$i])>122) $znak.= ord($tablica1[$i]);
if(ord($tablica1[$i])<=122) $znak = ord($tablica1[$i]);

if((($znak >='97')&&($znak <='122'))||(($znak >='65')&&($znak <='90'))||($znak =='197132')||($znak =='197131')||($znak =='195179')||($znak =='195147')||($znak =='196135')||($znak =='196134')||($znak =='196153')||($znak =='196152')||($znak =='196133')||($znak =='196132')||($znak =='197188')||($znak =='197187')||($znak =='197186')||($znak =='197185')||($znak =='197155')||($znak =='197154'))
{
print 'wykryto znak A-Z lub a-z lub polski znak <br />';
$znak='';
}
}

objaśnienie:
ciąg znaków z formularza, odebrany metodą POST, przyporządkujemy do zmiennej $tablica1 i tworzy się tablica znaków.
długośc tej tablicy zmierzymy za pomocą funkcji strlen();
pętla for będzie się wykonywać tak długo, jak długa bedzie tablica1;
znaki od A-Z i od a-z zajmują w tablicy 1 miejce, ale polskie znaki np."ń", "ć" - dwa miejsca
w dodatku - oba bajty polskich znaków są większe od 122

wiemy jednak, że znaki od A-Z i od a-z w tablicy kodów ASCII mają wartości mniejsze od 122
wystarczy sprawdzić czy wartość w tabeli1 jest mniejsza od 122 czy większa
jeśli jest mniejsza lub równa- znaczy, że trafiliśmy na znak od A-Z lub a-z
jesli jest większa znaczy, że trafiliśmy na jeden z polskich znaków.
tak długo jak długo wartość tablicy1 będzie większa od 122 tak długo dodajemy znaki do siebie
(linijka if(ord($tablica1[$i])>122) $znak.= ord($tablica1[$i]); )

aby sprawdzić, że w odebramym ciągu są tylko litery - bez znaków specjalnych
wystarczy porównać wartośc $znak z odopwiednikami z tableli ascii

funkcja ord() zamienia nam znak na kod ascii
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.