Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема при записи спец символов в MySQL

345
24 июля 2007 года
vadim_k
312 / / 01.08.2006
Пытаюсь записать в текстовое поле текст
содержащий фрагмент ....[ b ]%DESCRIPTION%[ /b ] ....
запись провожу с помощью функции mysql_escape_string($per)
но последним записанным пулучается [ b ] дальше пустота(это на хостинге)
а дома на локальном глючит по другому до записи дело вообще не доходит
функция
define('Encoding','windows-1251');
function utf8decode($str,$encode=Encoding)
{
return iconv('UTF-8',$encode,$str);
}
Не понимаю в чём проблема....
По моему эта функция обрезает всё начиная с %D и до конца
13K
24 июля 2007 года
ProgSoldier
58 / / 05.12.2006
Цитата: vadim_k
Не понимаю в чём проблема....
По моему эта функция обрезает всё начиная с %D и до конца



В данном примере вы конверируете с УТФ8 на кириллицу строку

 
Код:
[ b ]%DESCRIPTION%[ /b ]
. Зачем? Входным параметром данной функции должен быть текст на кодировке utf8.
Например:
Код:
define('Encoding','windows-1251');
 
 function utf8decode($str,$encode=Encoding)  {
  return iconv('UTF-8',$encode,$str);
 }
 echo utf8decode('<b>Некоторые версии MySQL доступны как РІ
        РІРёРґРµ бинарного дистрибутива, так Рё
        РІ РІРёРґРµ дистрибутива РёСЃС…РѕРґРЅРѕРіРѕ
        РєРѕРґР°. РџРѕРјРёРјРѕ этого, всем, кто желает
        ознакомиться СЃ нашими последними
        разработками Рё <u>помочь</u> нам
        тестировать <font style="color:#ff0000">новый</font> РєРѕРґ, РјС‹
        обеспечиваем открытый доступ Рє
        нашему текущему дереву исходных
        РєРѕРґРѕРІ.</b>');
345
24 июля 2007 года
vadim_k
312 / / 01.08.2006
Дружище ну просто не написал что текст приходит utf8...
Вот докопался то того что отключил функцию декодирования но при записи в MySQL
сочетание символов %DE заменяется на Ю почемуто ...дома на локальном во всяком случае
9.0K
24 июля 2007 года
Toxin_F
93 / / 03.01.2007
2 vadim_k
Используйте функцию ord() для спец символов.
13K
24 июля 2007 года
ProgSoldier
58 / / 05.12.2006
Цитата: vadim_k
Дружище ну просто не написал что текст приходит utf8...
Вот докопался то того что отключил функцию декодирования но при записи в MySQL
сочетание символов %DE заменяется на Ю почемуто ...дома на локальном во всяком случае


%XX - так обозначается в мускле 16-ричный код. %DE = десятичным 222 и по ASCII соответствует символу Ю. Так что копай где-то здесь.

13K
24 июля 2007 года
ProgSoldier
58 / / 05.12.2006
Кстати, может тебе пригодится при работе с utf8:
Код:
var char128to255 = new Array("%D0%82","%D0%83","%E2%80%9A","%D1%93","%E2%80%9E",
"%E2%80%A6", "%E2%80%A0","%E2%80%A1","%E2%82%AC","%E2%80%B0","%D0%89","%E2%80%B9",
"%D0%8A", "%D0%8C","%D0%8B","%D0%8F","%D1%92","%E2%80%98","%E2%80%99","%E2%80%9C",
"%E2%80%9D", "%E2%80%A2","%E2%80%93","%E2%80%94","%C2%98","%E2%84%A2","%D1%99",
"%E2%80%BA", "%D1%9A","%D1%9C","%D1%9B","%D1%9F","%C2%A0","%D0%8E","%D1%9E","%D0%88",
"%C2%A4", "%D2%90","%C2%A6","%C2%A7","%D0%81","%C2%A9","%D0%84","%C2%AB","%C2%AC",
"%C2%AD","%C2%AE","%D0%87","%C2%B0","%C2%B1","%D0%86","%D1%96","%D2%91","%C2%B5",
"%C2%B6","%C2%B7","%D1%91","%E2%84%96","%D1%94","%C2%BB","%D1%98","%D0%85","%D1%95",
"%D1%97","%D0%90","%D0%91","%D0%92","%D0%93","%D0%94","%D0%95","%D0%96","%D0%97",
"%D0%98","%D0%99","%D0%9A","%D0%9B","%D0%9C","%D0%9D","%D0%9E","%D0%9F","%D0%A0",
"%D0%A1","%D0%A2","%D0%A3","%D0%A4","%D0%A5","%D0%A6","%D0%A7","%D0%A8","%D0%A9",
"%D0%AA","%D0%AB","%D0%AC","%D0%AD","%D0%AE","%D0%AF","%D0%B0","%D0%B1","%D0%B2",
"%D0%B3","%D0%B4","%D0%B5","%D0%B6","%D0%B7","%D0%B8","%D0%B9","%D0%BA","%D0%BB",
"%D0%BC","%D0%BD","%D0%BE","%D0%BF","%D1%80","%D1%81","%D1%82","%D1%83","%D1%84",
"%D1%85","%D1%86","%D1%87","%D1%88","%D1%89","%D1%8A","%D1%8B","%D1%8C","%D1%8D",
"%D1%8E","%D1%8F");
Цитата:
Здесь записаны коды UTF-8 символов c ASCII-кодами от 128 до 255. С 0 по 127 ASCII-коды идентичны кодам UTF-8.


Сегодня из рассылки пришло.

15
24 июля 2007 года
shaelf
2.7K / / 04.05.2005
Попробуй замени стандартную функцию для экранирования на что-то такое
 
Код:
function escapeStringForSql($string)
{
    $string = str_replace('%', '\%', $string);
    $string = mysql_escape_string($string);
    return $string;
}

Комменты писать не стал, т.к. думаю и так всё понятно.
345
25 июля 2007 года
vadim_k
312 / / 01.08.2006
Уважаемый shaelf
Попробовал твою функцию у меня не работает, Ю так и появляется, и в других местах где есть \% появляются лищние \

Все % заменились кроме сочетания %DE оно превратилось в Ю
Я отправляю данные в скрипт при помощи AJAX и так понимаю что последовательност %DE заменяется на Ю ещё при пересылке,
Раньше у меня были проблемы при пересылке &
я этот знак заменял до пересылки
при помощи JavaScript
regexp=/&/g;
value=value.replace(regexp,'!xyx!');
пытаюсь заменить % подобным образом но почемуто не порлучается
regexp=/%/g;
value=value.replace(regexp,'!ооо!');

ВСЕМ СПАСИБО дело было в том что при пересылке данные уже искажались ...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог