zurek
25.03.2009, 16:53:09
Napisałem małego boota, który włazi narazie na jedną stronę i pobiera dane głównie przy pomocy preg_match_all(). Wszystko działa, informacje są zapisywane do bazy danych tylko niestety bez polskich znaków. Pojaiają się znane krzaczki, kwadraciki itp.. Strona, z której ściągam dane ma kodowaie UTF-8. Zmieniłem kodowanie plików boota, próbowałem z iconv i ze zmianami w ustawieniach DB, ale nic to nie dawało. Wszystko dalej tak samo. Szukałem na forum, znalazłem kilka wątków, ale żedane nie do końca moze mi pomóc. Z góry dziękuję wszystkim za jakąkolwiek pomoc i cierpliwość.
230005
25.03.2009, 17:37:23
Zdaje mi się, że jeśli chcesz używać polskich znaków w wyrażeniach regularnych, to powinieneś używać funkcji z przedrostkiem mb_ .
erix
25.03.2009, 17:52:43
Aby preg_ działał z wielobajtowymi zestawami znaków, dodaj flagę /u do wzorca.
PS. Zakresy a-z, czy pochodne nie zawierają polskich diakrytyków.
zurek
25.03.2009, 19:22:07
Wszystko w porządku. Teraz wyszukuje ciągi razem z polskimi znakami, ale źle dodaje do bazy. Nie wiem kompletnie dlaczego. Zmieniłem metodę porównywania napisów na utf8_polish_ci i nic. Co przeoczyłem?
erix
25.03.2009, 19:26:50
A wklep
mysql kodowanie w szukajkę, to znajdziesz mnóstwo tematów.
zurek
25.03.2009, 20:00:53
Dziękuję ci bardzo erix. Wystarczyło dodać przy dodawaniu rekordów do bazy danych:
<?php
?>
I dokładnie pozmieniać kodowania w pliku boota i w ustawieniach bazy.
Krisu
9.06.2009, 19:05:06
Cytat(erix @ 25.03.2009, 18:52:43 )

Aby preg_ działał z wielobajtowymi zestawami znaków, dodaj flagę /u do wzorca.
PS. Zakresy a-z, czy pochodne nie zawierają polskich diakrytyków.
Dodałem flagę u/ do wzorca, jednak funkcja preg_match_all nadal nie czyta polskich znaków. W jaki sposób je objąć, jeżeli nie przez zakres [a-z]?
Cytat
Dodałem flagę u/ do wzorca
Nie tak ta flaga wygląda. ;] Pokaż cały wzorzec.
Cytat
W jaki sposób je objąć, jeżeli nie przez zakres [a-z]?
Wpisać do klasy znaków po kolei.
[a-z] nie zawiera znaków narodowych. Co by było z np. rosyjskim?
Krisu
9.06.2009, 19:24:20
<?php
?>
Sprawdzam przez:
<?php
?>
Otrzymuję:
Kod
Array
<pre>(
[0] => Array
(
[0] => stru
[1] => p
[2] => dziwiatr
)
[1] => Array
(
[0] => stru
[1] => p
[2] => dziwiatr
)
)
W jakim kodowaniu masz zapisany skrypt?
Krisu
9.06.2009, 19:31:43
Kodowanie pliku w UTF-8 oraz dokumentu html:
Kod
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
</head>
wookieb
9.06.2009, 19:59:04
ani \w ani [a-zA-z] nie pobierzesz polskich znakow. Musisz je dopisac w wyrazeniu regularnym albo zastosowac
http://php.net/mb_ereg
Krisu
9.06.2009, 20:09:32
Jednak mb_ereg działa tylko jak preg_match, a nie znajdę odpowiednika preg_match_all, pośród funkcji MB? Nie ma żadnego innego sposobu by to obejść?
wookieb
9.06.2009, 20:15:13
Cytat(Krisu @ 9.06.2009, 21:09:32 )

a nie znajdę odpowiednika preg_match_all, pośród funkcji MB?
A czy manual php powiedział do ciebie kiedyś "sp....... nie chcę cię tu widzieć"? Szukaj
http://pl2.php.net/manual/pl/ref.mbstring.php
Krisu
9.06.2009, 20:48:31
niestety, ale nie widzę odpowiednika funkcji preg_match_all na tej liście, którą mi podałeś. Źle szukam, czy rzeczywiście takiego nie ma?
wookieb
9.06.2009, 21:01:06
Ech...
<?php
$tekst='hea heo hem hem hem';
mb_ereg_search_init($tekst, 'e[a-z]{1}');
var_dump(mb_ereg_search_getregs
());<tr
></tr
> while($wyn=mb_ereg_search_regs())
{
$matches[]=$wyn;
}
?>
Przypomnę, żeby korzystac z mb_eregi w ostatecznosci. Jezeli chodzi ci tylko o polskie znaki to juz mozna sie przemeczyc z preg_match_all
Krisu
9.06.2009, 21:12:03
Ok, dzięki za pomoc, jednak nie tylko do polskich znaków tego potrzebuję, ale również zagranicznych, dlatego nie chciałem używać preg_match_all.
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.