Wordpress - нужно "подружить" кодировки

artalex
На сайте с 08.12.2005
Offline
144
927

Всем доброго времени суток!

Столкнулся с такой проблемой:

- Есть сайт на домене, например, site.ru - на какой-то "самописной" cms - сайт сделан в кодировке windows-1251

- Есть Wordpress, установленный в субдиректории, например site.ru/blog - естественно, на utf-8

- Понадобилось на "морде" site.ru вывести список рубрик блога и анонсы...

Делаю так:

<?php require_once 'blog/wp-load.php'; define('WP_USE_THEMES', false); ?> 

И затем вывожу рубрики:

<h2>Рубрики</h2>

<ul>
<?php wp_list_categories('title_li=&orderby=order'); ?>
</ul>

Естественно, рубрики выводятся "кракозяблями"...

Что пытался делать:

И перед, и после инклуда wp-load.php пытался пере-инициализировать константы:

define('DB_CHARSET', 'cp1251');

define('DB_COLLATE', 'cp1251_general_ci');

А так же пытался слать запросы, типа:

$sqls = "SET NAMES cp1251";

$wpdb->query($sqls);
$sqls = "set character_set_client='cp1251'";
$wpdb->query($sqls);
$sqls = "set character_set_results='cp1251'";
$wpdb->query($sqls);
$sqls = "set collation_connection='cp1251'";
$wpdb->query($sqls);

Интересно, что при этом wp_list_categories вообще перестает что-либо выводить...

Кто сталкивался с проблемой? Как-то можно их "подружить" ?...

siv1987
На сайте с 02.04.2009
Offline
427
#1

"Переопределять" константы нет смысла, а вот с запросом может сработать.

$wpdb->query( "SET NAMES 'cp1251'" );

---------- Добавлено 13.03.2013 в 23:38 ----------

А как вариант


ob_start();
wp_list_categories('title_li=&orderby=order');
$str = ob_get_contents();
ob_end_clean();

echo iconv( 'utf-8', 'cp1251', $str );
artalex
На сайте с 08.12.2005
Offline
144
#2

После запроса

$wpdb->query( "SET NAMES 'cp1251'" );

wp_list_categories вообще перестает что-либо отдавать...

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#3

SET NAMES 'cp1251'

Помоему эти кавычки не нужны там.

Вариант с буфером тоже нот бэд;)

Но можно и так:


<?php echo iconv( 'utf-8', 'windows-1251', wp_list_categories('title_li=&orderby=order') ); ?>
Подпись))
artalex
На сайте с 08.12.2005
Offline
144
#4
<?php echo iconv( 'utf-8', 'windows-1251', wp_list_categories('title_li=&orderby=order') ); ?>

так по-моему, не можно... т.к. функция wp_list_categories не возвращает, а выводит сразу... но, конечно, можно использовать другие функции, - получать все что нужно в переменные... и каждый вывод "пропускать" через iconv() - но, думаю, это не самый верный способ...

думаю, надо все-же копать в сторону запросов к бд, которые "выставят" верную кодировку...

siv1987
На сайте с 02.04.2009
Offline
427
#5
Милованов Ю.С:
Помоему эти кавычки не нужны там.

Хз, в документации они есть.

Милованов Ю.С:
Но можно и так:

Можно, если отключить параметр echo в функции wp_list_categories. Он там вроде никак не передается.

---------- Добавлено 14.03.2013 в 00:04 ----------

artalex:
думаю, надо все-же копать в сторону запросов к бд, которые "выставят" верную кодировку...

Запрос который "выставят" верную кодировку есть выше, только он все равно не поможет, потом что вп работает в utf-8 и заточен он именно под эту кодировку. Кроме того лэнги он тоже использует в utf-8.

---------- Добавлено 14.03.2013 в 00:06 ----------

siv1987:
Можно, если отключить параметр echo в функции wp_list_categories. Он там вроде никак не передается.

wp_list_categories('title_li=&orderby=order&echo=0')

ВП же..

artalex
На сайте с 08.12.2005
Offline
144
#6

Да, действительно... параметр есть echo=0

Пока сделал так:

<?php echo iconv( 'utf-8', 'windows-1251', wp_list_categories('title_li=&orderby=order&echo=0') ); ?>

siv1987, Милованов Ю.С, спасибо за идею...

Все-таки, вопрос не закрыт, т.к. каждый вывод пропускать через iconv() не очень "красиво"...

siv1987
На сайте с 02.04.2009
Offline
427
#7
artalex:
Все-таки, вопрос не закрыт, т.к. каждый вывод пропускать через iconv() не очень "красиво"...
siv1987:
Запрос который "выставят" верную кодировку есть выше, только он все равно не поможет, потом что вп работает в utf-8 и заточен он именно под эту кодировку. Кроме того лэнги он тоже использует в utf-8.

По моему вариантов у вас здесь не много - или пропускать через iconv, или перевести все в единую кодировку.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#8
artalex:
Все-таки, вопрос не закрыт, т.к. каждый вывод пропускать через iconv() не очень "красиво"...

Чем Вам мешает iconv? Предвзятое отношение?

Ну если уж очень критично - сделайте репликацию. Будет 2 одинаковые базы. Одна в ЮТФ-8, а другая в вин-1251😂

IL
На сайте с 20.04.2007
Offline
435
#9
artalex:
- Понадобилось на "морде" site.ru вывести список рубрик блога и анонсы...
siv1987:
По моему вариантов у вас здесь не много - или пропускать через iconv, или перевести все в единую кодировку.

Ну, как минимум ещё "ручками" можно.. Т.е. соединение, запрос "SELECT * FROM ... " вывод (можно "жёстко" формат адресов прописать.. хотя, в перспективе может боком вылезти)...

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий