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 (1 - 10)
nospor
post
Post #2





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




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ąć?
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, 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?
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




http://www.php.net/manual/en/function.mb-strpos.php
Go to the top of the page
+Quote Post
Astronovi
post
Post #5





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

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


Cytat(nospor @ 19.10.2011, 11:47:43 ) *


nie działa za bardzo... (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




Cytat
nie działa za bardzo...
To pokaz jak użyłeś tej funkcji.
Go to the top of the page
+Quote Post
Astronovi
post
Post #7





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

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


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';
}

Ten post edytował Astronovi 19.10.2011, 11:57:28
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




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.
Go to the top of the page
+Quote Post
Astronovi
post
Post #9





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

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


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



Ten post edytował Astronovi 19.10.2011, 12:13:22
Go to the top of the page
+Quote Post
nospor
post
Post #10





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 #11





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

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: 23.09.2025 - 13:36