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
Форумы портала PHP.SU :: Версия для печати :: Проблемы с ANSII кодировкой и функцией chr
Форумы портала PHP.SU » » Кодировки и все смежное » Проблемы с ANSII кодировкой и функцией chr

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

1. Mad Doc - 29 Октября, 2012 - 10:36:35 - перейти к сообщению
Доброго времени суток всем! Вобщем, имею проблему с функцией 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, посему требуется автоматизировать процесс их конвертации.
Если подобная тема была, просьба не пинать, а ткнуть в ссылку, ибо поиском ничего не ищется.
Спасибо.
2. Runet4ik - 29 Октября, 2012 - 10:43:27 - перейти к сообщению
Попробуй для поля в бд задать кодировку cp1251_general_ci
3. Мелкий - 29 Октября, 2012 - 10:46:46 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $output = html_entity_decode(preg_replace('~&#(\d+)~', '&#$1;',$input),ENT_QUOTES, 'UTF-8');

?
4. Mad Doc - 29 Октября, 2012 - 10:57:20 - перейти к сообщению
Мелкий пишет:
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

 

Powered by ExBB FM 1.0 RC1