Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]preg_replace() Polskie znaki.
Forum PHP.pl > Forum > Przedszkole
ZaXaZ
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)
Michael2318
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ń.
ZaXaZ
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ć?
Michael2318
O preg_replace i polskich znakach w necie jest od groma tematów: http://forum.php.pl/index.php?showtopic=215905
ZaXaZ
  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. questionmark.gif
Crozin
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');
ZaXaZ
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.
by_ikar
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.
ZaXaZ
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;
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.