Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z mb_detect_encoding - illegal argument
Age1869
post 21.07.2011, 15:46:08
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 6
Dołączył: 25.10.2010
Skąd: Radzyn Podlaski

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


Witam, najpierw przedstawię skrypt:

  1. <?php
  2. $f=$_POST['pocz'];
  3. $kod = mb_detect_encoding($f, 'utf-8, iso-8859-2, cp1250');
  4. $pocz = iconv($kod, 'utf-8', $_POST['pocz']);
  5. $cat = $_POST['cat'];
  6. include('../../INCs/config.php');
  7. $polacz = mysql_query("INSERT INTO `baza` (`category`, `pocz`) VALUES ('$cat', '$pocz')", $polaczenie);
  8.  
  9. ?>


Działanie skryptu: w formularzu wpisuję lub wklejam jakiś tekst, w którym mogą być polskie znaki, dane są przesyłane do powyższego skryptu, który ma je dodać do bazy danych. Proste dodanie generuje jednak w mojej bazie (kodowanie utf-8) krzaczki, więc stwierdziłem, że trzeba zadbać o konwersję. Dodałem zatem funkcje mb_detect_encoding i inconv, niestety funkcja mb_detect_encoding wyrzuca błąd, jak wpiszę jej kodowanie windows-1250 lub cp1250.

Błędem tym jest wspomniany w temacie: illegal argument.

Będę wdzięczny za pomoc


--------------------
Michal Zarobkiewicz Photographic Gallery
Go to the top of the page
+Quote Post
morbic
post 21.07.2011, 17:29:50
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

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


Ale po co?

Nie lepiej w sekcji <head> dać
  1. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">


A w PHP, zaraz po połączeniu do bazy:
  1. mysql_query('SET NAMES utf8');


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Age1869
post 21.07.2011, 20:51:53
Post #3





Grupa: Zarejestrowani
Postów: 118
Pomógł: 6
Dołączył: 25.10.2010
Skąd: Radzyn Podlaski

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


W head oczywiście jest :-P

A odnośnie SET NAMES, mogę to dodać, jako część mojego zapytania do bazy?


--------------------
Michal Zarobkiewicz Photographic Gallery
Go to the top of the page
+Quote Post
morbic
post 22.07.2011, 00:00:54
Post #4





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

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


SET NAMES musi być wywoływane jako osobne zapytanie, zaraz po połączeniu się do bazy (czyli zaraz po mysql_connect() ), przy każdym wywołaniu skryptu. Najlepiej wrzucić to linijka pod linijką.

Informuje to serwer MySQL, że podczas połączenia z bazą, wszystkie dane będą przesyłane w UTF-8. W przeciwnym wypadku, jeśli serwer ma ustawione jako domyślne kodowanie ISO, a Ty nie poinformujesz go, że chcesz przesyłać dane w UTFie, to on przyjmie dane jako ISO i widząc, że ma bazę danych i tabelki w formacie UTF, będzie próbował konwertować dane, co oczywiście kończy się krzakami. No i oczywiście odniesie to skutek do nowo wstawianych danych, te dotychczasowe będą wyświetlane tak samo jak zostały wcześniej wstawione (czyli do kitu wink.gif ).

Temat stary jak świat, jest przyklejony: Temat: MYSQL Polskie znaki


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 01:53