Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]preg_replace() Polskie znaki.
ZaXaZ
post
Post #1





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


mam taki preg:
  1. preg_replace("/[^0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ_\-]/", "", $input);


próbuje zamienić wszystko poza a-Z (z polskimi) oraz _ - na nic, jednak wyskakuje błąd jak próbowałem dodać znaki Polskie, jak to naprawić?

ps. błąd taki:
Kod
<br />
<b>Fatal error</b>:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=''

Baza jest w utf8. (utf8_polish_ci)

Ten post edytował ZaXaZ 2.07.2014, 21:28:41
Go to the top of the page
+Quote Post
Michael2318
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Cytat
(latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE)


Już w treści błedu Ci pokazuje, że dajesz mu mix dwóch kodowań.
Go to the top of the page
+Quote Post
ZaXaZ
post
Post #3





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


Cytat(Michael2318 @ 2.07.2014, 22:32:53 ) *
Już w treści błedu Ci pokazuje, że dajesz mu mix dwóch kodowań.


a jakiś pomysł? da się wgl taki preg z polskimi w jednym zrobić?
Go to the top of the page
+Quote Post
Michael2318
post
Post #4





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


O preg_replace i polskich znakach w necie jest od groma tematów: http://forum.php.pl/index.php?showtopic=215905
Go to the top of the page
+Quote Post
ZaXaZ
post
Post #5





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


  1. $input = preg_replace('~[^\\pL\d]+~u', '-', $input);
  2. $input = trim($input, '-');
  3. $input = iconv('utf-8', 'us-ascii//TRANSLIT', $input);
  4. $input = preg_replace('/[^0-9a-zA-Z_\-]/', '', $input);


zrobiłem tak jak wyżej (słabo znam się na wyrażeniach regularnych), zamienia mi polskie znaki na angielskie odpowiedniki. (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Będziesz dodawać litery każdego alfabetu do tego wyrażenia? Przecież od tego mamy od lat Unicode (w PHP częściowe wsparcie od niemal 10) by z niego korzystać: http://php.net/manual/pl/regexp.reference.unicode.php
2. Błąd jest związany z bazą danych (PDO) i nie ma absolutnie nic wspólnego z PCRE.
3. latin1_swedish_ci oraz utf8_general_ci to systemy/sposoby porównania znaków, nie kodowania same w sobie - to bardziej uwaga do @Michael2318.
4. Powinieneś ustawić kodowanie dla połączenia z bazą na UTF-8. Możesz to zrobić natychmiast przy nawiązaniu połączenia z bazą:
  1. $pdo = new PDO('mysql:host=nazwaHosta;db_name=nazwaBazyDanych;charset=utf8', 'użytkownik', 'hasło');
Go to the top of the page
+Quote Post
ZaXaZ
post
Post #7





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


Cytat(Crozin @ 2.07.2014, 23:00:03 ) *
1. Będziesz dodawać litery każdego alfabetu do tego wyrażenia? Przecież od tego mamy od lat Unicode (w PHP częściowe wsparcie od niemal 10) by z niego korzystać: http://php.net/manual/pl/regexp.reference.unicode.php
2. Błąd jest związany z bazą danych (PDO) i nie ma absolutnie nic wspólnego z PCRE.
3. latin1_swedish_ci oraz utf8_general_ci to systemy/sposoby porównania znaków, nie kodowania same w sobie - to bardziej uwaga do @Michael2318.
4. Powinieneś ustawić kodowanie dla połączenia z bazą na UTF-8. Możesz to zrobić natychmiast przy nawiązaniu połączenia z bazą:
  1. $pdo = new PDO('mysql:host=nazwaHosta;db_name=nazwaBazyDanych;charset=utf8', 'użytkownik', 'hasło');


4 mam odkąd zacząłem zabawe z db

  1. $PDO = new PDO('mysql:host='.mysql_host.';dbname='.mysql_db.';charset=utf8', mysql_user, mysql_pass, array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));


co do linku, co mam szukać? bo nie rozumiem.
Chcę mieć w stringu znaki od a do Z. Z polskimi, znakiem podkreślenia (_) i minusem (-) wszystko inne chcę odrzucić przed dodaniem do bazy.

Ten post edytował ZaXaZ 2.07.2014, 22:14:05
Go to the top of the page
+Quote Post
by_ikar
post
Post #8





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Ok ale nie rozumiesz tego co napisał ci @Crozin, a napisał że gdzieś musisz mieć różne kodowanie, np jedną kolumnę w utf8 a drugą w latin, albo kolumny utf8 a samą tabelę latin. Sprawdź swoją bazę danych, sprawdź połączenie z bazą danych, jak i sprawdź pliki.
Go to the top of the page
+Quote Post
ZaXaZ
post
Post #9





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


Cytat(by_ikar @ 3.07.2014, 15:04:19 ) *
Ok ale nie rozumiesz tego co napisał ci @Crozin, a napisał że gdzieś musisz mieć różne kodowanie, np jedną kolumnę w utf8 a drugą w latin, albo kolumny utf8 a samą tabelę latin. Sprawdź swoją bazę danych, sprawdź połączenie z bazą danych, jak i sprawdź pliki.


Ok, a jak mogę zamienić odpowiednie rzeczy w bazie na UTF-8? (zapytaniem).

Edit: Takie zapytanie rozwiązało problem:

  1. ALTER TABLE `users` CHANGE `nick` `nick` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;


Ten post edytował ZaXaZ 8.07.2014, 11:27:00
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: 24.08.2025 - 16:31