2013-02-20 33 views
6

Miałem formularz rejestracyjny, który wstawi do tabeli pręta, sortowanie jest w utf8_general_ci, a ja używam SET NAMES utf8 w php script, OK tutaj jest problem, nie mogę wstawić ciągu innego niż czysty alfabet, próbuję wprowadzić "Hélène" w polu formularza, po uruchomieniu kwerendy sql, sprawdzam z moją tabelą db, pole jest wstawiane jako "H", reszta alfabetu nie może być wstawiona, gdy ciąg ma specjalny alfabet na przykład: é, ř.MySQL Wstaw specjalne znaki

Czy ktoś może pomóc? dzięki.

ROZWIĄZANIE:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

mysql_query("SET NAMES utf8"); 

powyżej dwóch linii jest kluczowym elementem, aby zaakceptować wejście do bazy danych i wyjście na stronie internetowej.

Dziękuję wszystkim za radę.

+3

Przeczytaj o kodowaniu i ich obsługa w tych dwóch wielkich tekstów i na pewno znajdziesz ten problem: http://kunststube.net/frontback/ i http://kunststube.net/encoding/. –

+0

Co to jest kodowanie tabeli DB? Upewnij się, że to także utf-8. Sprawdź również, czy twój skrypt otrzymuje prawidłowy ciąg znaków. Echo dane formularza przed wstawieniem go do DB. (Po zatwierdzeniu). –

+0

Wygląd roztworu o [zestawów nazw utf8 w MySQL] [1] [1]: http://stackoverflow.com/questions/2159434/set-names-utf8-in- mysql – sanj

Odpowiedz

1

Upewnij się stworzyć bazę danych z utf8 kodowania

CREATE SCHEMA `youdatabasename` DEFAULT CHARACTER SET utf8; 
+0

To nie jest odpowiedź. –

+0

cóż, to jest to, czego używam, aby upewnić się, że nie mam problemu z kodowaniem :) powinien być zamiast tego komentarz? –

+0

to nie wystarczy, aby mieć pewność. –

2

próby wstawienia danych po kodowaniu. spróbuj mysql_real_escape_string(), aby zakodować. następnie wykonaj zapytanie wstawiania.

EDIT: -

Ta odpowiedź została wysłana rok temu. Teraz mysql_real_escape_string() dla php 5 będzie działać w mysqli :: real_escape_string ten format. sprawdź here

1

A jeśli nie chcesz się martwić o tak wielu różnych kodowań charset czy htmlentities nie działa dla Ciebie, tutaj alternatywę: użyłem mysqli połączenia DB (i PHPV5) tworzą stanowiska do pisania/wstawienie do MySQl DB.

$Notes = $_POST['Notes']; //can be text input or textarea. 

$charset = mysqli_character_set_name($link); //only works for mysqli DB connection 
printf ("To check your character set but not necessary %s\n",$charset); 

$Notes = str_replace('"', '&quot;', $Notes); //double quotes for mailto: emails. 
$von = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é"); //to correct double whitepaces as well 
$zu = array("&auml;","&ouml;","&uuml;","&szlig;","&Auml;","&Ouml;","&Uuml;","&nbsp;","&#233;"); 
$Notes = str_replace($von, $zu, $Notes); 
echo " Notes:".$Notes."<br>" ; 
$Notes = mysqli_real_escape_string($link, $Notes); //for recommended mysqli DB connection. 
//$Notes = mysql_real_escape_string($Notes); //for old deprecated mysql DB connection. 

// mysqli_real_escape_string Escapes special characters in a string for use in an SQL statement 

echo " Notes:".$Notes ; //ready for inserting 
+0

Podczas wyświetlania zawartości: I ten wiersz w nagłówku, jeśli pojawiają się śmieszne znaki. KarlosFontana

+0

'mysqli_real_escape_string' nie powinno być używane, gdy istnieje doskonały system zastępczy. – tadman