Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблемы с ANSII кодировкой и функцией chr

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Mad Doc
Отправлено: 29 Октября, 2012 - 10:36:35
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Доброго времени суток всем! Вобщем, имею проблему с функцией chr.
Есть некоторая строка в ANSII кодировке:
CODE (htmlphp):
скопировать код в буфер обмена
  1. &#1086&#1089&#1100&#32&#82&#101&#97&#108&#44&#32&#57&#46&#48&#48&#34&#49&#50&#98&#111&#108&#116&#32&#82&#71&#44&#32&#1044&#1080&#1072&#1084&#1077&#1090&#1088&#32&#1096&#1077&#1089&#1090&#1077&#1088&#1085&#1080&#32&#51&#48&#46&#53&#40&#49&#46&#50&#48&#34&#41&#44&#32&#1082&#1086&#1083&#1083&#1080&#1095&#1077&#1089&#1090&#1074&#1086&#32&#1096&#1083&#1080&#1094&#32&#45&#32&#50&#56&#44&#32&#1087&#1077&#1088&#1077&#1076&#1072&#1090&#1086&#1095&#1085&#1086&#1077&#32&#1095&#1080&#1089&#1083&#1086&#32&#45&#32&#1074&#1089&#1077

В таком виде строка хранится в бд. Требуется преобразовать ее в "читабельный", чтобы превести некоторые преобразования, а затем вернуть в БД.
делаю так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $str="&#1086&#1089&#1100&#32&#82&#101&#97&#108&#44&#32&#57&#46&#48&#48&#34&#49&#50&#98&#111&#108&#116&#32&#82&#71&#44&#32&#1044&#1080&#1072&#1084&#1077&#1090&#1088&#32&#1096&#1077&#1089&#1090&#1077&#1088&#1085&#1080&#32&#51&#48&#46&#53&#40&#49&#46&#50&#48&#34&#41&#44&#32&#1082&#1086&#1083&#1083&#1080&#1095&#1077&#1089&#1090&#1074&#1086&#32&#1096&#1083&#1080&#1094&#32&#45&#32&#50&#56&#44&#32&#1087&#1077&#1088&#1077&#1076&#1072&#1090&#1086&#1095&#1085&#1086&#1077&#32&#1095&#1080&#1089&#1083&#1086&#32&#45&#32&#1074&#1089&#1077";
  3.  
  4. $str_array= explode("&#", $str);
  5.  
  6. foreach( $str_array as $char) {
  7. echo chr($char);
  8.  
  9. }

В результате на выходе получаю:
CODE (html):
скопировать код в буфер обмена
  1. >AL Real, 9.00"12bolt RG, 80<5B@ H5AB5@=8 30.5(1.20"), :>;;8G5AB2> H;8F - 28, ?5@540B>G=>5 G8A;> - 2A5

А должно получится
CODE (html):
скопировать код в буфер обмена
  1. ось Real, 9.00"12bolt RG, Диаметр шестерни 30.5(1.20"), колличество шлиц - 28, передаточное число - все

Как видно, английские символы и цифры перекодируются, как видно, нормально, а кирилица - нет. В чем проблема, и как ее победить???

Подобных строк в БД - over9000, посему требуется автоматизировать процесс их конвертации.
Если подобная тема была, просьба не пинать, а ткнуть в ссылку, ибо поиском ничего не ищется.
Спасибо.
 
 Top
Runet4ik
Отправлено: 29 Октября, 2012 - 10:43:27
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  
Откуда: Россия


Помог: 0 раз(а)




Попробуй для поля в бд задать кодировку cp1251_general_ci
 
 Top
Мелкий Супермодератор
Отправлено: 29 Октября, 2012 - 10:46:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PHP:
скопировать код в буфер обмена
  1. $output = html_entity_decode(preg_replace('~&#(\d+)~', '&#$1;',$input),ENT_QUOTES, 'UTF-8');

?


-----
PostgreSQL DBA
 
 Top
Mad Doc
Отправлено: 29 Октября, 2012 - 10:57:20
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Мелкий пишет:
PHP:
скопировать код в буфер обмена
  1. $output = html_entity_decode(preg_replace('~&#(\d+)~', '&#$1;',$input),ENT_QUOTES, 'UTF-8');

?


Благодарю, поторопился просить помощи, нашел рабочий вариант:
PHP:
скопировать код в буфер обмена
  1.  
  2. mb_convert_encoding('&#' . intval($char) . ';', 'UTF-8', 'HTML-ENTITIES');

Так все работает )))
(Добавление)
Runet4ik пишет:
Попробуй для поля в бд задать кодировку cp1251_general_ci

Да не, она в БД в таком виде и хранится, в ANSI - символах.
помогла функция
mb_convert_encoding
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Кодировки и все смежное »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB