• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

dziwny strlen

Object Storage Arubacloud
+1 głos
478 wizyt
pytanie zadane 4 marca 2018 w PHP przez dervil Gaduła (3,030 p.)
edycja 4 marca 2018 przez dervil
Spotkałem się z czymś dziwnym.

Pobieram region

Łódź Voivodeship

zapisuje w bazie danych

potem pobieram z bazy danych zmienną odpowiadającą regionowi, tą samą co zapisałem

i co się okazuje

że zmienna pobrana z bazy różni się od zmiennej pobranej z api

sprawdzam echo obie zmienne tak samo wyświetla, sprawdzam kodowanie i obie tak samo utf8, sprawdzam strlen a tu zmienna z api ma 19 a zmienna z bazy ma 25

normalnie jak ktoś wie o co chodzi to szacun i jak to naprawić żeby php za pomocą finkcji if rozpoznawał że obie zmienne są takie same

 

1

pobranie i zapisanie w bazie danych

$pobranie =  unserialize(file_get_contents('http://stronagdziepobieram'));

$region = $pobranie['region'];

i zapisuje zwykłym input do bazy danych

2

pobranie z bazy danych i porównanie

pobieram zwykłym select * z bazy

określam $region2=pobrana z bazy danych

porównanie

$detect1 = mb_strlen($region);
$detect1u = mb_detect_encoding($region);
$detect2 = mb_strlen($region2);
$detect2u = mb_detect_encoding($region2);
if($region==$region2){echo'OK';}else{echo'NIE ZGADZAJĄ SIĘ';}

echo $region.'-'.$detect1.'-'.$detect1u.'<br />'.$region2.'-'.$detect2.'-'.$detect2u;

3

wynik

NIE ZGADZAJĄ SIĘ

Łódź Voivodeship-23-UTF-8

Łódź Voivodeship-16-UTF-8

2 odpowiedzi

+2 głosów
odpowiedź 4 marca 2018 przez CzikaCarry Szeryf (75,340 p.)
Spróbuj skorzystać z mb_strlen()
komentarz 4 marca 2018 przez dervil Gaduła (3,030 p.)
Spotkałem się z czymś dziwnym.

Pobieram region

Łódź Voivodeship

zapisuje w bazie danych

potem pobieram z bazy danych zmienną odpowiadającą regionowi, tą samą co zapisałem

i co się okazuje

że zmienna pobrana z bazy różni się od zmiennej pobranej z api

sprawdzam echo obie zmienne tak samo wyświetla, sprawdzam kodowanie i obie tak samo utf8, sprawdzam strlen a tu zmienna z api ma 19 a zmienna z bazy ma 25

normalnie jak ktoś wie o co chodzi to szacun i jak to naprawić żeby php za pomocą finkcji if rozpoznawał że obie zmienne są takie same

 

1

pobranie i zapisanie w bazie danych

$pobranie =  unserialize(file_get_contents('http://stronagdziepobieram'));

$region = $pobranie['region'];

i zapisuje zwykłym input do bazy danych

2

pobranie z bazy danych i porównanie

pobieram zwykłym select * z bazy

określam $region2=pobrana z bazy danych

porównanie

$detect1 = mb_strlen($region);
$detect1u = mb_detect_encoding($region);
$detect2 = mb_strlen($region2);
$detect2u = mb_detect_encoding($region2);
if($region==$region2){echo'OK';}else{echo'NIE ZGADZAJĄ SIĘ';}

echo $region.'-'.$detect1.'-'.$detect1u.'<br />'.$region2.'-'.$detect2.'-'.$detect2u;

3

wynik

NIE ZGADZAJĄ SIĘ

Łódź Voivodeship-23-UTF-8

Łódź Voivodeship-16-UTF-8
komentarz 4 marca 2018 przez dervil Gaduła (3,030 p.)

@CzikaCarry, to na pewno z powodu zapisu w bazie danych, bo zapisuje w bazie mi słowo Łódź jakimiś dziwnymi znakami i dlatego strlen jest inny, ale dziwne że php się nie zgadza w ifie i nie wiem jak temu zaradzić, bo baza nie chce mi inaczej zapisywać

+2 głosów
odpowiedź 4 marca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Nie wiem gdzie dokładnie której funkcji używasz, ale strlen() ma problem z polskimi znakami, używaj zawsze mb_strlen().
komentarz 5 marca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Chociażby ten, który odpowiada za wyświetlanie. Ciężko mi powiedzieć, nie widząc tego u siebie trudno znaleźć taki problem, gdzie wydaje się, że wszystko jest dobrze.
komentarz 5 marca 2018 przez dervil Gaduła (3,030 p.)

no dobra już wiem, jak dodam 

$polaczenie->set_charset('utf8');

przed każdym połączeniem gdy wyciągam zmianne to jest wszystko okej, pokazuje polskie znaki, cacy, ale ciągle się nie zgadza z tym ściąganym z file_get_contetnt, ciągle strlen jest inny mimo że echo takie samo

wynik

NIE ZGADZAJĄ SIĘ

Łódź Voivodeship-23-UTF-8

Łódź Voivodeship-16-UTF-8

komentarz 6 marca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Nie mam pojęcia jak dane zwracane są z tego API, może w tym jest problem? To zwykły JSON? Próbowałeś json_decode() zamiast unserialize?
komentarz 6 marca 2018 przez dervil Gaduła (3,030 p.)
próbowałem, to samo, ale już sobię z tym poradziłe, po prostu konweruje to przez swoją baze i tyle, zrobiłem statystyki i już :D
komentarz 6 marca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Ok, ważne że się udało ;)

Podobne pytania

–1 głos
1 odpowiedź 138 wizyt
pytanie zadane 27 kwietnia 2020 w PHP przez Farba Początkujący (440 p.)
0 głosów
1 odpowiedź 112 wizyt
pytanie zadane 18 stycznia 2019 w PHP przez Horson Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 328 wizyt

92,539 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...