UTF-8 і нямецкія сімвалы?

I have problem with German characters on my web site,

у HTML/PHP частка вэб-сайта ў мяне ёсць гэты код, каб усталяваць UTF-8:

<meta charset="utf-8">

У MySQL, у мяне ёсць гэты код, каб усталяваць UTF-8

SET CHARSET 'utf8';
  1. Here is some word on German: Gemäß

  2. Here is how that word looks in MySQL table:

    Gemäß

  3. Here is how that word is shown on the site: Gemäß

Што такое праблема? Дзякуючы.

7
магчыма дублікат ўвесь шлях
дададзена аўтар deceze, крыніца
вы да гэтага часу няправільная кадоўка ў базе дадзеных, і вы павінны гэта выправіць у любым выпадку.
дададзена аўтар Aris, крыніца
вы да гэтага часу няправільная кадоўка ў базе дадзеных, і вы павінны гэта выправіць у любым выпадку.
дададзена аўтар Aris, крыніца
Як вы паклалі, што ў базу дадзеных? Ўстаноўка кадоўкі не дапамагае, калі вы проста кінуць Latin-1 байт пасля сцвярджаючы, што вы адпраўляеце UTF-8.
дададзена аўтар geoffspear, крыніца
Што сказаў @Wooble. Вы павінны пераканацца, што радкі вы устаўляючы ў той жа кадоўцы. Проста таму, што мета-тэг сайта кажа UTF-8 не азначае, што радкі ў кодзе будзе UTF-8, а таксама (хоць я заўсёды лічыў, UTF-8 была кадыроўка па змаўчанні ... Я бачу, я магу рабіць нешта тут не так і там таксама).
дададзена аўтар Renan, крыніца
Што сказаў @Wooble. Вы павінны пераканацца, што радкі вы устаўляючы ў той жа кадоўцы. Проста таму, што мета-тэг сайта кажа UTF-8 не азначае, што радкі ў кодзе будзе UTF-8, а таксама (хоць я заўсёды лічыў, UTF-8 была кадыроўка па змаўчанні ... Я бачу, я магу рабіць нешта тут не так і там таксама).
дададзена аўтар Renan, крыніца
@Wooble У маёй connection.php гэты код: mysql_set_charset ( 'utf8'); Уставіць дадзеныя, як гэта: mysql_query ( "INSERT INTO slike (назва, струнныя, матэрыял, цана, памеры, мовы, валюта) VALUES ( '$ назва', '$ код', '$ матэрыял', '$ коштаў',» $ памеры, '& ZWNJ; $ LANG', '$ цана') ") ці памерці (mysql_error ());
дададзена аўтар user1814358, крыніца
@Wooble У маёй connection.php гэты код: mysql_set_charset ( 'utf8'); Уставіць дадзеныя, як гэта: mysql_query ( "INSERT INTO slike (назва, струнныя, матэрыял, цана, памеры, мовы, валюта) VALUES ( '$ назва', '$ код', '$ матэрыял', '$ коштаў',» $ памеры, '& ZWNJ; $ LANG', '$ цана') ") ці памерці (mysql_error ());
дададзена аўтар user1814358, крыніца

17 адказы

Па-першае, пераканайцеся, што ў вас ёсць UTF-8 знакаў у вашай базе дадзеных.

Пасля гэтага паспрабуйце выкарыстоўваць SET NAMES «utf8» пасля падлучэння да 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));

Як ручной кажа:

<�Р> SET NAMES паказвае, які набор сімвалаў кліент будзе выкарыстоўваць для адпраўкі SQL   заявы на сервер ... Гэта таксама вызначае набор знакаў, што сервер павінен   выкарыстоўваць для адпраўкі вынікаў назад кліенту.
1
дададзена

Па-першае, пераканайцеся, што ў вас ёсць UTF-8 знакаў у вашай базе дадзеных.

Пасля гэтага паспрабуйце выкарыстоўваць SET NAMES «utf8» пасля падлучэння да 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));

Як ручной кажа:

<�Р> SET NAMES паказвае, які набор сімвалаў кліент будзе выкарыстоўваць для адпраўкі SQL   заявы на сервер ... Гэта таксама вызначае набор знакаў, што сервер павінен   выкарыстоўваць для адпраўкі вынікаў назад кліенту.
1
дададзена

Я выкарыстоўваю гэты код, каб атрымаць тытул:

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

Я проста перавызначыць, што

$title = $_POST['title'];
1
дададзена
@ Jonast92 Скажыце, што цяпер? Я хацеў бы, каб вы растлумачыць свой пункт тут: stackoverflow.com/q/12703420/476
дададзена аўтар deceze, крыніца
@ Jonast92 mysql_real_escape_string цалкам дастаткова, каб прадухіліць ін'екцыі SQL пры правільным ужыванні . Праблема заключаецца ў тым, што многія людзі не ўжываць яго належным чынам.
дададзена аўтар deceze, крыніца
Зараз у вас ёсць сапраўды памылка, у той час як першая заява толькі ўскараскаліся сваім выхадам, цяпер вы зрабілі гэта небяспечна. Заўсёды пазбегнуць дадзеных для адпаведнага выхаду і толькі для гэтага выхаду. Для адлюстравання дадзеных на HTML-старонцы, вы павінны выкарыстоўваць htmlspecialchars() , каб ўставіць радок у выкарыстанні SQL заявы mysqli_real_escape_string() або параметризованные запыты.
дададзена аўтар martinstoeckli, крыніца
Выкарыстанне mysql_ * з'яўляецца састарэлым і mysql_real_escape_string не збіраецца трымаць сваю базу дадзеных бяспекі. FYI.
дададзена аўтар Jonast92, крыніца
Вядома, гэта можа быць карысна, але прымяняць яго толькі не будзе рабіць, напрыклад, ён не будзе бяспечна для вас ад лагічных ін'екцый SQL. Вы маглі б, а проста прапусціць яго, але гэта не перашкаджае ўжываць яго, калі ўсе іншыя меры бяспекі выкарыстоўваюцца як-добра.
дададзена аўтар Jonast92, крыніца

Я выкарыстоўваю гэты код, каб атрымаць тытул:

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

Я проста перавызначыць, што

$title = $_POST['title'];
1
дададзена
@ Jonast92 Скажыце, што цяпер? Я хацеў бы, каб вы растлумачыць свой пункт тут: stackoverflow.com/q/12703420/476
дададзена аўтар deceze, крыніца
@ Jonast92 mysql_real_escape_string цалкам дастаткова, каб прадухіліць ін'екцыі SQL пры правільным ужыванні . Праблема заключаецца ў тым, што многія людзі не ўжываць яго належным чынам.
дададзена аўтар deceze, крыніца
Зараз у вас ёсць сапраўды памылка, у той час як першая заява толькі ўскараскаліся сваім выхадам, цяпер вы зрабілі гэта небяспечна. Заўсёды пазбегнуць дадзеных для адпаведнага выхаду і толькі для гэтага выхаду. Для адлюстравання дадзеных на HTML-старонцы, вы павінны выкарыстоўваць htmlspecialchars() , каб ўставіць радок у выкарыстанні SQL заявы mysqli_real_escape_string() або параметризованные запыты.
дададзена аўтар martinstoeckli, крыніца
Выкарыстанне mysql_ * з'яўляецца састарэлым і mysql_real_escape_string не збіраецца трымаць сваю базу дадзеных бяспекі. FYI.
дададзена аўтар Jonast92, крыніца
Вядома, гэта можа быць карысна, але прымяняць яго толькі не будзе рабіць, напрыклад, ён не будзе бяспечна для вас ад лагічных ін'екцый SQL. Вы маглі б, а проста прапусціць яго, але гэта не перашкаджае ўжываць яго, калі ўсе іншыя меры бяспекі выкарыстоўваюцца як-добра.
дададзена аўтар Jonast92, крыніца

Паспрабуйце SET NAMES 'utf8' або SET NAMES 'utf8' . Некаторыя з гэтых твораў выяўленчага для партугальскай, верагодна, нямецкі таксама. Я проста не магу ўспомніць, які з іх правільны, але калі гэта не так, будзе праведзена памылка.

0
дададзена

Паспрабуйце SET NAMES 'utf8' або SET NAMES 'utf8' . Некаторыя з гэтых твораў выяўленчага для партугальскай, верагодна, нямецкі таксама. Я проста не магу ўспомніць, які з іх правільны, але калі гэта не так, будзе праведзена памылка.

0
дададзена

Вы павінны пераканацца, што падключэнне таксама UTF-8.

з MySQLi гэта зроблена з чымсьці накшталт гэтага:

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

Цяпер, калі вы як-то ў канчатковым выніку з няправільнымі сімваламі ў базе дадзеных ёсць спосаб зрабіць гэта правільна:

  1. у PHP скрыпт, атрымаць інфармацыю, як вы робіце цяпер, гэта значыць без ўстаноўкі злучэння. Такім чынам, памылка будзе выпраўленая і перавернуты і ў файле PHP вы будзеце мець сімвалы ў правільным фармаце UTF-8.
  2. у PHP скрыпт зваротнай запісу інфармацыі з усталяваннем злучэння з UTF-8
  3. у гэты момант вы павінны ўбачыць сімвал правільна ў вашай базе даных
  4. Зараз змяніць усе свае функцыі чытання/запісы вашага сайта выкарыстоўваць UTF-8 зараз
0
дададзена

Вы павінны пераканацца, што падключэнне таксама UTF-8.

з MySQLi гэта зроблена з чымсьці накшталт гэтага:

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

Цяпер, калі вы як-то ў канчатковым выніку з няправільнымі сімваламі ў базе дадзеных ёсць спосаб зрабіць гэта правільна:

  1. у PHP скрыпт, атрымаць інфармацыю, як вы робіце цяпер, гэта значыць без ўстаноўкі злучэння. Такім чынам, памылка будзе выпраўленая і перавернуты і ў файле PHP вы будзеце мець сімвалы ў правільным фармаце UTF-8.
  2. у PHP скрыпт зваротнай запісу інфармацыі з усталяваннем злучэння з UTF-8
  3. у гэты момант вы павінны ўбачыць сімвал правільна ў вашай базе даных
  4. Зараз змяніць усе свае функцыі чытання/запісы вашага сайта выкарыстоўваць UTF-8 зараз
0
дададзена

You will need to do this for php 5.x

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

and for php 4.x

  $yourNiceLookingString = htmlspecialchars($YourStringFromDB);
0
дададзена

You will need to do this for php 5.x

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

and for php 4.x

  $yourNiceLookingString = htmlspecialchars($YourStringFromDB);
0
дададзена

in HTML5 use

<meta charset="utf-8">

in HTML 4.0.1 use

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
0
дададзена

in HTML5 use

<meta charset="utf-8">

in HTML 4.0.1 use

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
0
дададзена

У мяне была тая ж праблема. якую я вырашана з дапамогай:

калі вы ўжо стварылі табліцу, вам трэба змяніць набор знакаў, як:

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

your tables character set is set to latin_swedish by default by MySQL.

also, you might face some problems while retrieving the data and displaying it to you page.For that include: mysql_set_charset('utf8') just below the line where you have connected your database. eg:

mysql_connect('localhost','root','');
mysql_select_db('my db');
mysql_set_charset('utf8');
0
дададзена

вынікі HTML сутнасць кадуюцца як калі б яны былі апрацаваны htmlentities() Цікава, калі вашы зменныя ibserted, як атрыманыя з формы або быць апрацаваны скажам у wysiwg рэдактары, напрыклад?

Ва ўсякім выпадку, яны павінны надрукаваць штраф на шаблоне HTML, але ў html_entity_decode() павінен зрабіць яго.

Спадзяюся, што гэта дапамагае

0
дададзена

вынікі HTML сутнасць кадуюцца як калі б яны былі апрацаваны htmlentities() Цікава, калі вашы зменныя ibserted, як атрыманыя з формы або быць апрацаваны скажам у wysiwg рэдактары, напрыклад?

Ва ўсякім выпадку, яны павінны надрукаваць штраф на шаблоне HTML, але ў html_entity_decode() павінен зрабіць яго.

Спадзяюся, што гэта дапамагае

0
дададзена

Усталюйце тып дадзеных у базе дадзеных, каб выкарыстоўваць UTF-8, а таксама, гэта павінна вырашыць праблему.

0
дададзена

Усталюйце тып дадзеных у базе дадзеных, каб выкарыстоўваць UTF-8, а таксама, гэта павінна вырашыць праблему.

0
дададзена