Всем привет. Возможно кому-то пригодится следующая информация (параллельно отписываюсь в ТП)
Столкнулся с тем, что [B]preg_replace_callback[/B] искавший html ссылки для замены в контенте страницы ([B]OnEndBufferContent[/B]) возвращает [B]NULL[/B] на некоторых страницах при использовании блогов или в темах форума. В preg last error при этом числился [B]PREG_BAD_UTF8_ERROR[/B].
Если открыть тему форума не авторизованным пользователем, то все ок. Для авторизованного пользователя занялся поиском.
Сравнение проблемного контента страницы с [B]$contentNew = iconv('utf-8', 'utf-8//IGNORE', $content);[/B] указало на 1 строку:
[CODE]-<sc ript type="text/javascript">
(window.BX||top.BX).message({'YANDEX_KEY':''});
(window.BX||top.BX).message({'TRANS_FROM':'......Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,э,э,э,э,э,э','TRANS_TO':....
+<sc ript type="text/javascript">
(window.BX||top.BX).message({'YANDEX_KEY':''});
(window.BX||top.BX).message({'TRANS_FROM':'......Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,,,,,,','TRANS_TO':'.....[/CODE]поиск по исходникам вывел меня на файл: [B]/bitrix/modules/main/lang/ru/js_core_translit.php[/B]
в коде которого можно наблюдать:[CODE]<?
$MESS["TRANS_FROM"] = "а,б,в,г,...,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,\xb3,\xb2,\xbf,\xaf,\xb4,\xa5";
?>
[/CODE]Если я правильно понял, то цель была захвать 6 символов украинского(?) языка ([B]і,І,ї,Ї,ґ,Ґ[/B]), но в файл просто встроили коды win1251. utf-8 ведь никто не использует...
Заменил на:
[CODE].....Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,\xD1\x96,\xD0\x86,\xD1\x97,\xD0\x87,\xD2\x91,\xD2\x90";[/CODE]
p.s.: полезная штука:
[URL=http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%D2%90&mode=char]http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%D2%90&mode=char[/URL]
Столкнулся с тем, что [B]preg_replace_callback[/B] искавший html ссылки для замены в контенте страницы ([B]OnEndBufferContent[/B]) возвращает [B]NULL[/B] на некоторых страницах при использовании блогов или в темах форума. В preg last error при этом числился [B]PREG_BAD_UTF8_ERROR[/B].
Если открыть тему форума не авторизованным пользователем, то все ок. Для авторизованного пользователя занялся поиском.
Сравнение проблемного контента страницы с [B]$contentNew = iconv('utf-8', 'utf-8//IGNORE', $content);[/B] указало на 1 строку:
[CODE]-<sc ript type="text/javascript">
(window.BX||top.BX).message({'YANDEX_KEY':''});
(window.BX||top.BX).message({'TRANS_FROM':'......Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,э,э,э,э,э,э','TRANS_TO':....
+<sc ript type="text/javascript">
(window.BX||top.BX).message({'YANDEX_KEY':''});
(window.BX||top.BX).message({'TRANS_FROM':'......Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,,,,,,','TRANS_TO':'.....[/CODE]поиск по исходникам вывел меня на файл: [B]/bitrix/modules/main/lang/ru/js_core_translit.php[/B]
в коде которого можно наблюдать:[CODE]<?
$MESS["TRANS_FROM"] = "а,б,в,г,...,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,\xb3,\xb2,\xbf,\xaf,\xb4,\xa5";
?>
[/CODE]Если я правильно понял, то цель была захвать 6 символов украинского(?) языка ([B]і,І,ї,Ї,ґ,Ґ[/B]), но в файл просто встроили коды win1251. utf-8 ведь никто не использует...
Заменил на:
[CODE].....Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,\xD1\x96,\xD0\x86,\xD1\x97,\xD0\x87,\xD2\x91,\xD2\x90";[/CODE]
p.s.: полезная штука:
[URL=http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%D2%90&mode=char]http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%D2%90&mode=char[/URL]