Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem z odczytaniem polskiego znaku z POST
Astronovi
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 14.06.2011

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




No to napisz jak. Nie bądź egoistą. Niech potomni którzy natrafią na ten wątek też skorzystają.
Go to the top of the page
+Quote Post
Astronovi
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 14.06.2011

Ostrzeżenie: (0%)
-----


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

Ten post edytował Astronovi 19.10.2011, 15:04:39
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 01:34