2013-05-22 3 views
7

Mam problem z niemieckich znaków na mojej stronie internetowej,UTF-8 i niemieckie znaki?

w html/php część witryny Mam ten kod, aby ustawić UTF-8:

<meta charset="utf-8"> 

w mysql, mam ten kod ustawić UTF-8

SET CHARSET 'utf8'; 
  1. Oto słowo na niemiecki: Gemäß

  2. Oto jak wygląda to słowo w tabeli mysql:

    Gem&Atilde;&curren;&Atilde;Ÿ

  3. Oto jak to słowo jest pokazany na stronie: Gemäß

Co jest problemem? Dzięki.

+1

Jak wprowadziłeś to do bazy danych? Ustawienie zestawu znaków nie pomoże, jeśli po prostu wyrzucisz 1-sza bajt po potwierdzeniu, że wysyłasz plik utf-8. – geoffspear

+0

Co powiedział @Wooble. Musisz upewnić się, że wstawiane napisy są w tym samym kodowaniu. Tylko dlatego, że metatag witryny mówi, że UTF-8 nie oznacza, że ​​ciągi w twoim kodzie będą również UTF-8 (chociaż zawsze zakładałem, że kodowanie domyślne to UTF-8 ... Widzę, że mogę coś robić źle tu i tam też). – Renan

+0

@Wooble W moim związku.php to ten kod: mysql_set_charset ('utf8'); Wprowadzam takie dane: mysql_query ("INSERT INTO (tytuł, ciąg, materiał, cena, wymiary, język, waluta) WARTOŚCI (" $ title "," $ code "," $ material "," $ price ") ',' $ dimensions ',' $ lang ',' $ price ') ") lub umrzyj (mysql_error()); – user1814358

Odpowiedz

0

Wypróbuj SET NAMES 'utf8' lub SET NAMES 'utf-8'. Niektóre z nich działają dobrze w języku portugalskim, prawdopodobnie również w języku niemieckim. Po prostu nie mogę sobie przypomnieć, który z nich jest poprawny, ale jeśli tak nie jest, zostanie wygenerowany błąd.

1

Najpierw upewnij się, że w bazie danych znajdują się znaki UTF-8.

Po tym, spróbuj użyć SET NAMES 'UTF8' po podłączeniu do MySQL:

$con=mysqli_connect("host", "user", "pw", "db"); 
if (!$con) 
{ 
    die('Failed to connect to mySQL: ' .mysqli_connect_errno()); 
} 

mysqli_query($con, "SET NAMES 'UTF8'") or die("ERROR: ". mysqli_error($con)); 

Jak manual mówi:

Ustaw nazwy wskazuje, co zestaw znaków klient użyje wysłać SQL oświadczenia do serwer ... Określa także zestaw znaków, który serwer powinien używać do wysyłania wyników do klienta.

0

należy upewnić się, że POŁĄCZENIE jest również utf-8.

z mysqli Odbywa się to z czymś tak:

$connection = mysqli_connect($host, $user, $pass, $db_name); 
$connection->set_charset("utf8"); 

Teraz jeśli jakoś skończyło się z niewłaściwych znaków w bazie danych istnieje sposób, aby zrobić to dobrze:

  1. w A Skrypt PHP, pobieraj informacje tak jak teraz, tzn. Bez ustawiania połączenia. W ten sposób błąd zostanie odwrócony i poprawiony, aw pliku php będziesz miał znaki w poprawnym formacie utf-8.
  2. w skrypcie PHP, odpisać informacje z ustawieniem połączenia na UTF-8
  3. w tym momencie powinien pojawić się znak poprawny w swojej bazie danych
  4. teraz zmienić wszystkie funkcje odczytu/zapisu swojej witryny używać UTF-8 od teraz
0

w HTML5 używać

<meta charset="utf-8"> 

w HTML 4.0.1 zastosowanie

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

używałem tego kodu, aby uzyskać tytuł:

$title = mysql_real_escape_string(htmlentities($_POST['title'])); 

po prostu zastąpić że do

$title = $_POST['title']; 
+0

Użycie mysql_ * jest przestarzałe, a mysql_real_escape_string nie zapewni bezpieczeństwa twojej bazy danych. FYI. – Jonast92

+2

Teraz rzeczywiście popełniłeś błąd, podczas gdy pierwsze stwierdzenie tylko zaszkodziło twojemu wynikowi, teraz uczyniłeś to niebezpiecznym. Zawsze unikaj danych dla odpowiedniego wyjścia i tylko dla tego wyjścia. Aby wyświetlać dane na stronie HTML, należy użyć 'htmlspecialchars()', aby wstawić łańcuch w instrukcji SQL, używając 'mysqli_real_escape_string()' lub sparametryzowanych zapytań. – martinstoeckli

+0

@ Jonast92 'mysql_real_escape_string' jest całkowicie wystarczający, aby zapobiec iniekcji SQL *, jeśli zostanie zastosowany właściwie *. Problem polega na tym, że wiele osób nie stosuje go prawidłowo. – deceze

0

miałem ten sam problem. którą rozwiązano za pomocą:

jeśli masz już swój stolik, musisz zmodyfikować znak ustawiony jako:

alter table <table name> convert to character set utf8 collate utf8_general_ci. 

Twój zestaw znaków tabele jest ustawiony na latin_swedish domyślnie przez MySQL.

również możesz napotkać pewne problemy podczas pobierania danych i wyświetlania ich na Twojej stronie. Do tego należy dodać: mysql_set_charset('utf8') tuż pod linią, do której podłączyłeś swoją bazę danych. np

mysql_connect('localhost','root',''); 
mysql_select_db('my db'); 
mysql_set_charset('utf8'); 
0

wyniki są html jednostka kodowane tak jakby były one przetwarzane przez htmlentities(), zastanawiam się, jeśli zmienne są ibserted otrzymanej z formy lub są przetwarzane przez powiedzieć wysiwg edytor na przykład?

W każdym razie powinny wydrukować dobrze na szablonie html, ale html_entity_decode() powinno to zrobić.

Nadzieja to pomaga

0

Trzeba to zrobić dla php 5.x

$yourNiceLookingString = 
htmlspecialchars ($YourStringFromDB, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1'); 

i php 4.x

$yourNiceLookingString = htmlspecialchars($YourStringFromDB); 
0

Ustawić typ danych w bazie danych UTF-8, a także , powinno to rozwiązać problem.