Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как вставить в mysql символы "Зарегестрировано", "Торговая марка"?
 
 автор: sasha_ua   (20.12.2010 в 21:05)   письмо автору
 
 

Здравствуйте.

Здесь написано http://phpfaq.ru/slashes не используйте addslashes, используйте mysql_real_escape_string() и будет вам счастье.

Но у меня не получается вставить в таблицу наименования товаров со знаком "Зарегестрировано" и украинская буква "i" с двумя точками тоже не заносится..
Являются ли такие символы - спецсимволами?

И еще вопрос - когда я извлекаю из БД наименование товара, оно извлекается "чистым" без доп. символов?

  Ответить  
 
 автор: Trianon   (20.12.2010 в 21:15)   письмо автору
 
   для: sasha_ua   (20.12.2010 в 21:05)
 

под спецсимволами имеются в виду апостроф, кавычка, обратная косая черта, CR, LF и NUL .
На остальные mysql_real_escape_string не имеет никакого влияния.
Но важно, чтобы символы входили в ту когдовую страницу, кодировка которой выбрана для поля таблицы БД, иначе сервер не сможет в поле таблицы их запомнить.
И чтобы с той же кодировкой совпадала кодировка соединения с сервером, иначе Вы даже не сможете эти символы серверу в запросе передать, не говоря уже о том, чтобы дело дошло до таблиц.

  Ответить  
 
 автор: sasha_ua   (20.12.2010 в 21:36)   письмо автору
 
   для: Trianon   (20.12.2010 в 21:15)
 

Вот поле в phpmyadmin
Поле Тип Сравнение
---------------------------------------------------------------------
product_name varchar(255) utf8_general_ci

Вот настройки соединения
$conn = mysql_connect ("localhost", "root", "") or die ("Dont connect to db 2!!");
mysql_query('SET NAMES utf8'); // Чтобы utf8 работало правильно в phpmyadmin
@mysql_select_db("mydb") or die ("Dont connect to parser 2!")

  Ответить  
 
 автор: Trianon   (20.12.2010 в 22:09)   письмо автору
 
   для: sasha_ua   (20.12.2010 в 21:36)
 

здесь все правильно, разве что оператор вызова mysql_query() тоже следует снабдить or die

А как Вы заносите строку в таблицу?

  Ответить  
 
 автор: sasha_ua   (20.12.2010 в 22:25)   письмо автору
 
   для: Trianon   (20.12.2010 в 22:09)
 

Заношу так:
mysql_real_escape_string(cp1251_to_utf8($prod_name)


Может дело в функции преобразования?
function cp1251_to_utf8 ($txt)  {
    $in_arr = array (
        chr(208), chr(192), chr(193), chr(194),
        chr(195), chr(196), chr(197), chr(168),
        chr(198), chr(199), chr(200), chr(201),
        chr(202), chr(203), chr(204), chr(205),
        chr(206), chr(207), chr(209), chr(210),
        chr(211), chr(212), chr(213), chr(214),
        chr(215), chr(216), chr(217), chr(218),
        chr(219), chr(220), chr(221), chr(222),
        chr(223), chr(224), chr(225), chr(226),
        chr(227), chr(228), chr(229), chr(184),
        chr(230), chr(231), chr(232), chr(233),
        chr(234), chr(235), chr(236), chr(237),
        chr(238), chr(239), chr(240), chr(241),
        chr(242), chr(243), chr(244), chr(245),
        chr(246), chr(247), chr(248), chr(249),
        chr(250), chr(251), chr(252), chr(253),
        chr(254), chr(255)
    );

    $out_arr = array (
        chr(208).chr(160), chr(208).chr(144), chr(208).chr(145),
        chr(208).chr(146), chr(208).chr(147), chr(208).chr(148),
        chr(208).chr(149), chr(208).chr(129), chr(208).chr(150),
        chr(208).chr(151), chr(208).chr(152), chr(208).chr(153),
        chr(208).chr(154), chr(208).chr(155), chr(208).chr(156),
        chr(208).chr(157), chr(208).chr(158), chr(208).chr(159),
        chr(208).chr(161), chr(208).chr(162), chr(208).chr(163),
        chr(208).chr(164), chr(208).chr(165), chr(208).chr(166),
        chr(208).chr(167), chr(208).chr(168), chr(208).chr(169),
        chr(208).chr(170), chr(208).chr(171), chr(208).chr(172),
        chr(208).chr(173), chr(208).chr(174), chr(208).chr(175),
        chr(208).chr(176), chr(208).chr(177), chr(208).chr(178),
        chr(208).chr(179), chr(208).chr(180), chr(208).chr(181),
        chr(209).chr(145), chr(208).chr(182), chr(208).chr(183),
        chr(208).chr(184), chr(208).chr(185), chr(208).chr(186),
        chr(208).chr(187), chr(208).chr(188), chr(208).chr(189),
        chr(208).chr(190), chr(208).chr(191), chr(209).chr(128),
        chr(209).chr(129), chr(209).chr(130), chr(209).chr(131),
        chr(209).chr(132), chr(209).chr(133), chr(209).chr(134),
        chr(209).chr(135), chr(209).chr(136), chr(209).chr(137),
        chr(209).chr(138), chr(209).chr(139), chr(209).chr(140),
        chr(209).chr(141), chr(209).chr(142), chr(209).chr(143)
    );

    $txt = str_replace($in_arr,$out_arr,$txt);
    return $txt;
}


Я получаю наименование в cp1251, преобразую в utf-8.

  Ответить  
 
 автор: Trianon   (20.12.2010 в 22:36)   письмо автору
 
   для: sasha_ua   (20.12.2010 в 22:25)
 

>Я получаю наименование в cp1251, преобразую в utf-8.

вот, допустим, Вы получили наименование 'Имя' в cp1251.
$s = 'Имя';

Посмотрите, что за байты там реально лежат:
for($i = 0; $i < strlen($s); $i++) echo ' '.ord($s[$i]);

скорее всего в таблицах этой функции (которые Вы тут показали) они банально не перечислены.
Там наверняка только 66 букв русского алфавита (33 большие и 33 маленькие).

А зачем пользоваться такими огрызками?
Вообще-то есть функция iconv()

  Ответить  
 
 автор: sasha_ua   (21.12.2010 в 00:07)   письмо автору
 
   для: Trianon   (20.12.2010 в 22:36)
 

Да дело было в этой функции. Я уже не помню где точно, но в интернете люди писали что встроенные функции с этим не справляются. собственно я и воспользовался этой функцией..

Спасибо iconv() заработало.

  Ответить  
 
 автор: sasha_ua   (21.12.2010 в 00:11)   письмо автору
 
   для: Trianon   (20.12.2010 в 22:36)
 

Вот нашел почему я отказался от iconv():
http://mihalytch.org.ua/programming/php/convert-cp1251-utf8.html

Но дата 12.05.2008, может поправили?

  Ответить  
 
 автор: Саня   (21.12.2010 в 12:58)   письмо автору
 
   для: sasha_ua   (21.12.2010 в 00:11)
 

> но, как известно iconv даёт большую нагрузку на сервер...
Интересное заявление! Думается мне что автор это "известно" почерпнул из гугла. Хотя может в те годы так оно и было.

  Ответить  
 
 автор: sasha_ua   (23.12.2010 в 20:45)   письмо автору
 
   для: Саня   (21.12.2010 в 12:58)
 

Меня больше беспокоит возврат пустой строки.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования