Проблемы с кодировкой при записи в mySQL (jQuery+ ajax + php)

Фанат

oncle terrible
Команда форума
вообще-то это не строки. под строкой мы обычно понимаем данные. а это скорее команды
и перекодировать их невозможно. их можно только поменять. на другие.

строка у тебя приходит из браузера. и ты её помещаешь в запрос (причем без необходимой обработки).
вот её можно перекодировать.
например поменяв SET NAMES cp1251 на SET NAMES utf8 - тогда эту строку перекодирует база данных
но лучше эту команду оставить в покое, поскольку ты наверняка напортачишь с другими данными.
и перекодировать саму строку.
в общем, mb_convert_encoding()
и не забудь про mysql_real_escape_string()
 

Cliff1336

Новичок
вообще-то это не строки. под строкой мы обычно понимаем данные. а это скорее команды
и перекодировать их невозможно. их можно только поменять. на другие.

строка у тебя приходит из браузера. и ты её помещаешь в запрос (причем без необходимой обработки).
вот её можно перекодировать.
например поменяв SET NAMES cp1251 на SET NAMES utf8 - тогда эту строку перекодирует база данных
но лучше эту команду оставить в покое, поскольку ты наверняка напортачишь с другими данными.
и перекодировать саму строку.
в общем, mb_convert_encoding()
и не забудь про mysql_real_escape_string()
поменял код в файле-обработчике на это:
PHP:
<?php
if  (isset($_POST['key'])) {$key = $_POST['key']; if ($key == '') {unset($key);}}
$db = (mysql_connect("localhost","bmb","123"));
mysql_select_db ("bmb",$db);
mysql_query("SET NAMES 'cp1251'");
$key = mb_convert_encoding($key, "cp1251", "utf8");
mysql_query ("INSERT INTO data (html) VALUES ('$key')");
?>
и в файле "откуда летит", для удобства сделал так
PHP:
$('#save').click(function() {
var saveTable = "Кирилица"; //$('#saveTag').html();
$.ajax({
   type: "POST",
   url: "saveTable.php",
   data: "key=" + saveTable,
   success: function(data){
     alert("Table Saved!");
   }
 });
кодировка таблы и самого рядка таблы, в бд, установлена cp1251_general_ci

но все равно сейвит в таблу Кирилица
если стираю команду mysql_query("SET NAMES 'cp1251'"); , все равно та же фигня
 

Cliff1336

Новичок
у mb_convert_encoding другие обозначения кодировок
исправил, но все равно - "Кирилица"
PHP:
<?php
if  (isset($_POST['key'])) {$key = $_POST['key']; if ($key == '') {unset($key);}}
$db = (mysql_connect("localhost","bmb","123"));
mysql_select_db ("bmb",$db);
mysql_query("SET NAMES 'cp1251'");
$key = mb_convert_encoding($key, "Windows-1251", "UTF-8");
mysql_query ("INSERT INTO data (html) VALUES ('$key')");
?>
 

Фанат

oncle terrible
Команда форума
выводи на экран (и смотри файрфоксом) либо пиши в файл перекодированную строку.
все должно быть нормально.
ты точно новую выводишь, а не старые?
 

Cliff1336

Новичок
PHP:
$('#save').click(function() {
var saveTable = "Кирилица"; //$('#saveTag').html();
$.ajax({
   type: "POST",
   url: "saveTable.php",
   data: "key=" + saveTable,
   success: function(data){
     alert(data);
   }
 });
и
PHP:
<?php
if  (isset($_POST['key'])) {$key = $_POST['key']; if ($key == '') {unset($key);}}
$db = (mysql_connect("localhost","bmb","123"));
mysql_select_db ("bmb",$db);
mysql_query("SET NAMES 'UTF8'");
$key = mb_convert_encoding($key, "UTF-8");
mysql_query ("INSERT INTO data (html) VALUES ('$key')");
echo ($key);
?>
поменял код на это, в окошке выводит в алерте "кирилица", а в БД все равно не правильно пишет, хотя в бд табла в УТФ8 :(
 

Cliff1336

Новичок
выводи на экран (и смотри файрфоксом) либо пиши в файл перекодированную строку.
все должно быть нормально.
ты точно новую выводишь, а не старые?
ну у меня все было точно так, как в коде который я скинул, там ведь правильно?
 

Фанат

oncle terrible
Команда форума
в бд "таблу" трогать не надо было
если уж ты перевел все свои данные на утф (зачем-то), то надо и вывод тоже в утф переводить. теперь.
хотя я бы перекодировал одну эту строку.
ну тогда дальше сам.
ты все равно не делаешь то, что тебе говорят, и делаешь то, что не говорят

алерт тут вообще ни о чём.
имелось в виду смотреть файрбагом, прошу прощения.
смотреть на клиенте смысла никакого
смотреть надо на то, что получается на сервере
 
Сверху