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

Форум PHP

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

 

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

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

тема: Проблемы с кодировкой.
 
 автор: jaroslav   (31.10.2013 в 15:17)   письмо автору
 
 

Добрый день.

Проблема такая. Сайт в кодировке cp-1231, используется ajax.
Т.е. надо текст проверять и переводить спец. символы в cp-1231.
используется такая функция для проверки:



/* Проверка и перевод кодировки из utf8  в cp-1251 */ 
function utf8_to_cp1251 (&$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($out_arr, $in_arr, $txt);
 return $txt;
}
/* Проверка и перевод кодировки из utf8  в cp-1251 */ 




Текст проверяется так: utf8_to_cp1251 (&$_POST[mess]);

Однако, в функции не учитываются некоторые спец. символы. Например: «111» - кавычки, какие-то дефисы и.т.д.. Есть ли какое-то решение? Или как можно её дописать? Вместо « - в базу данных идёт


Если после function utf8_to_cp1251 (&$txt) { добавить: $txt = iconv('utf-8', 'cp1251', $txt); то ошибка исправляется.. Так правильно делать?

  Ответить  
 
 автор: Simbioziz   (02.11.2013 в 02:27)   письмо автору
 
   для: jaroslav   (31.10.2013 в 15:17)
 

« - этот символ 0171 (alt + 0171)
» - а этот 0187 (alt + 0187)

Может поможет?

  Ответить  
 
 автор: Sfinks   (02.11.2013 в 05:44)   письмо автору
 
   для: jaroslav   (31.10.2013 в 15:17)
 

> Если после function utf8_to_cp1251 (&$txt) { добавить:
> $txt = iconv('utf-8', 'cp1251', $txt);
> то ошибка исправляется.. Так правильно делать?


Правильно - сразу так делать, а не писать громоздкие функции:
$txt = iconv('utf-8', 'cp1251', $txt);
и все!

  Ответить  
 
 автор: Simbioziz   (02.11.2013 в 13:45)   письмо автору
 
   для: Sfinks   (02.11.2013 в 05:44)
 

Так можно но не правильно. Нагрузка на сервер большая.

  Ответить  
 
 автор: MHz   (02.11.2013 в 14:58)   письмо автору
 
   для: Simbioziz   (02.11.2013 в 13:45)
 

Это как раз самый правильный вариант. нагрузка зависит от размера

  Ответить  
 
 автор: Sfinks   (04.11.2013 в 19:41)   письмо автору
 
   для: Simbioziz   (02.11.2013 в 13:45)
 

Да вы что? Вот прям функция написанная на С++ И откомпелированная и встроенная в ядро, выполняющая тоже самое, что написанная топикстартером на PHP, т.е. скриптом, работает медленнее?

Это не правильно с точки зрения организации хранения данных.... БД должна быть в той же кодировке, что и сайт. И не надо будет ничего конвертировать.

  Ответить  
 
 автор: Jaroslav   (07.11.2013 в 11:23)   письмо автору
 
   для: Sfinks   (04.11.2013 в 19:41)
 

Кодировка базы и сайта - совпадают. cp-1251.
Но для аякса - нужен UTF-8. И при этом функция: $txt = iconv('utf-8', 'cp1251', $txt); не всегда корректно переводит. Вернее, бывает, что не переводит кодировку.

  Ответить  
 
 автор: Sfinks   (08.11.2013 в 07:39)   письмо автору
 
   для: Jaroslav   (07.11.2013 в 11:23)
 

> $txt = iconv('utf-8', 'cp1251', $txt); не всегда корректно переводит.
Вообще, это нормально. Потому что в кодировке cp1251 нет и десятой части тех символов, которые есть в utf8. И правильно не переведет ни одна функция, потому что это теоретически не возможно.

Но!
Если у Вас в utf8 есть только то, что можно ввести на странице, с кодировкой cp1251, значит отсутствующих символов быть не должно.
Можете привести пример "не корректного перевода"?

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

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