Peredelkin (02 Июль 2011 - 21:50) писал:
ocStore v1.0.0 RC1
#41
Отправлено 02 Июль 2011 - 22:09
#42
Отправлено 03 Июль 2011 - 04:40
Peredelkin (02 Июль 2011 - 21:50) писал:
Теперь на форуме кроме того что такое BOM будет ещё одна любимая тема... прийдётся объяснять что такое mbstring, как его настраивать на разных версиях php, что на что менять если настройки не помогают и т.д.
#43
Отправлено 03 Июль 2011 - 15:15
Yesvik (03 Июль 2011 - 04:40) писал:
Теперь на форуме кроме того что такое BOM будет ещё одна любимая тема... прийдётся объяснять что такое mb_string, как его настраивать на разных версиях php, что на что менять если настройки не помогают и т.д.
#44
Отправлено 03 Июль 2011 - 21:52
Peredelkin (03 Июль 2011 - 15:15) писал:
Попробую описать суть проблемы...
Скрипт автокомплита отправляет введённые символы на сервер в кодированном виде, с помощью encodeURIComponent, а на стороне сервера нет декодирования. Декодировать можно по разному, я использовал urldecode вот так:
в файлах
admin/controller/catalog/attribute.php
admin/controller/catalog/option.php
admin/controller/catalog/product.php
admin/controller/sale/affiliate.php
admin/controller/sale/customer.php
catalog/controller/affiliate/tracking.php
строку
'filter_name' => $this->request->post['filter_name'],изменил на
'filter_name' => urldecode($this->request->post['filter_name']),И это только часть проблемы. Даже после декодирования, приключения не заканчиваются...
В модели, при подстановке введённых символов в SQL запрос, используется функция strtolower для корректной работы которой необходима корректная установка локали, а с учетом того что используется UTF-8 - нужна многобайтная версия этой функции - mb_strtolower. И вот тут начинается цирк...
Ручками отловить strtolower и прописать многобайтный аналог с указанием кодировки UTF-8 - во первых геморойно, а во вторых кто-то обязательно нарвётся на отключенный mbstring и вообще ничего не будет работать. Проще включить автоматическую замену функций на их многобайтные аналоги с помощью mbstring.func_overload 2 и указанием кодировки по умолчанию mbstring.internal_encoding UTF-8. Но и тут не всё так просто...
У меня на PHP 5.2.4 всё решилось добавлением в .htaccess строк
php_value mbstring.func_overload 2 php_value mbstring.internal_encoding UTF-8А не просто потому что mbstring кривой как поросячий хвост и установка настроек на уровне директорий иногда приводит к тому что начинается полный бардак и настройки начинают путать педали... Проблема известна давно и на сколько мне известно по сей день не решена. Пытаясь как-то решить эту проблему, начиная с PHP 5.2.8 (или PHP 5.2.9, точно не помню), mbstring.func_overload нельзя включить в .htaccess и проблему можно решить только на уровне php.ini
Кроме этого в файлах
admin/view/template/catalog/product_form.tpl
admin/view/template/catalog/review_form.tpl
admin/view/template/module/featured.tpl
admin/view/template/sale/contact.tpl
admin/view/template/sale/coupon_form.tpl
admin/view/template/sale/order_form.tpl
admin/view/template/sale/return_form.tpl
catalog/view/theme/default/template/affiliate/tracking.tpl
желательно выставить задержку...
Ищем все строки
delay: 0,и меняем на
delay: 500,Это не имеет отношения к проблеме, но нужно что-бы не задалбывать сервак кучей бесполезных запросов автокомплита.
#45
Отправлено 04 Июль 2011 - 00:35
#47
Отправлено 04 Июль 2011 - 08:45
Yesvik (04 Июль 2011 - 04:36) писал:
Если это баг, то лучше написать про это в http://code.google.c...art/issues/list или на форуме.
#48
Отправлено 04 Июль 2011 - 15:13
agoodis (04 Июль 2011 - 08:45) писал:
В данном случае трудно сказать кто отвечает за эти баги.
С точки зрения синтаксиса и алгоритма работы - всё нормально, проблема с кириллицей возникает из за особенностей реализации некоторых функций в PHP.
Во многих проектах, для обхода подобных особенностей, свои шаманские бубны пишут...
#49
Отправлено 04 Июль 2011 - 16:27
??
Добавить ещё украинский алфавит и для ocStore вполне сойдёт, ИМХО.
#50
Отправлено 04 Июль 2011 - 17:56
Sammy95 (04 Июль 2011 - 16:27) писал:
??
Добавить ещё украинский алфавит и для ocStore вполне сойдёт, ИМХО.
#51
Отправлено 04 Июль 2011 - 19:11
/**
* Lowercase a UTF-8 string.
*/
function drupal_strtolower($text) {
global $multibyte;
if ($multibyte == UNICODE_MULTIBYTE) {
return mb_strtolower($text);
}
else {
// Use C-locale for ASCII-only lowercase
$text = strtolower($text);
// Case flip Latin-1 accented letters
$text = preg_replace_callback( '/\xC3[\x80-\x96\x98-\x9E]/', '_unicode_caseflip', $text);
return $text;
}
}
/**
* Helper function for case conversion of Latin-1.
* Used for flipping U+C0-U+DE to U+E0-U+FD and back.
*/
function _unicode_caseflip($matches) {
return $matches[0][0] . chr(ord($matches[0][1]) ^ 32);
}
А это бубен из PHPBB без регулярок
/**
* UTF-8 aware alternative to strtolower
* Make a string lowercase
* Note: The concept of a characters "case" only exists is some alphabets
* such as Latin, Greek, Cyrillic, Armenian and archaic Georgian - it does
* not exist in the Chinese alphabet, for example. See Unicode Standard
* Annex #21: Case Mappings
*
* @param string
* @return string string in lowercase
*/
function utf8_strtolower($string)
{
static $utf8_upper_to_lower = array(
"\xC3\x80" => "\xC3\xA0", "\xC3\x81" => "\xC3\xA1",
"\xC3\x82" => "\xC3\xA2", "\xC3\x83" => "\xC3\xA3", "\xC3\x84" => "\xC3\xA4", "\xC3\x85" => "\xC3\xA5",
"\xC3\x86" => "\xC3\xA6", "\xC3\x87" => "\xC3\xA7", "\xC3\x88" => "\xC3\xA8", "\xC3\x89" => "\xC3\xA9",
"\xC3\x8A" => "\xC3\xAA", "\xC3\x8B" => "\xC3\xAB", "\xC3\x8C" => "\xC3\xAC", "\xC3\x8D" => "\xC3\xAD",
"\xC3\x8E" => "\xC3\xAE", "\xC3\x8F" => "\xC3\xAF", "\xC3\x90" => "\xC3\xB0", "\xC3\x91" => "\xC3\xB1",
"\xC3\x92" => "\xC3\xB2", "\xC3\x93" => "\xC3\xB3", "\xC3\x94" => "\xC3\xB4", "\xC3\x95" => "\xC3\xB5",
"\xC3\x96" => "\xC3\xB6", "\xC3\x98" => "\xC3\xB8", "\xC3\x99" => "\xC3\xB9", "\xC3\x9A" => "\xC3\xBA",
"\xC3\x9B" => "\xC3\xBB", "\xC3\x9C" => "\xC3\xBC", "\xC3\x9D" => "\xC3\xBD", "\xC3\x9E" => "\xC3\xBE",
"\xC4\x80" => "\xC4\x81", "\xC4\x82" => "\xC4\x83", "\xC4\x84" => "\xC4\x85", "\xC4\x86" => "\xC4\x87",
"\xC4\x88" => "\xC4\x89", "\xC4\x8A" => "\xC4\x8B", "\xC4\x8C" => "\xC4\x8D", "\xC4\x8E" => "\xC4\x8F",
"\xC4\x90" => "\xC4\x91", "\xC4\x92" => "\xC4\x93", "\xC4\x96" => "\xC4\x97", "\xC4\x98" => "\xC4\x99",
"\xC4\x9A" => "\xC4\x9B", "\xC4\x9C" => "\xC4\x9D", "\xC4\x9E" => "\xC4\x9F", "\xC4\xA0" => "\xC4\xA1",
"\xC4\xA2" => "\xC4\xA3", "\xC4\xA4" => "\xC4\xA5", "\xC4\xA6" => "\xC4\xA7", "\xC4\xA8" => "\xC4\xA9",
"\xC4\xAA" => "\xC4\xAB", "\xC4\xAE" => "\xC4\xAF", "\xC4\xB4" => "\xC4\xB5", "\xC4\xB6" => "\xC4\xB7",
"\xC4\xB9" => "\xC4\xBA", "\xC4\xBB" => "\xC4\xBC", "\xC4\xBD" => "\xC4\xBE", "\xC5\x81" => "\xC5\x82",
"\xC5\x83" => "\xC5\x84", "\xC5\x85" => "\xC5\x86", "\xC5\x87" => "\xC5\x88", "\xC5\x8A" => "\xC5\x8B",
"\xC5\x8C" => "\xC5\x8D", "\xC5\x90" => "\xC5\x91", "\xC5\x94" => "\xC5\x95", "\xC5\x96" => "\xC5\x97",
"\xC5\x98" => "\xC5\x99", "\xC5\x9A" => "\xC5\x9B", "\xC5\x9C" => "\xC5\x9D", "\xC5\x9E" => "\xC5\x9F",
"\xC5\xA0" => "\xC5\xA1", "\xC5\xA2" => "\xC5\xA3", "\xC5\xA4" => "\xC5\xA5", "\xC5\xA6" => "\xC5\xA7",
"\xC5\xA8" => "\xC5\xA9", "\xC5\xAA" => "\xC5\xAB", "\xC5\xAC" => "\xC5\xAD", "\xC5\xAE" => "\xC5\xAF",
"\xC5\xB0" => "\xC5\xB1", "\xC5\xB2" => "\xC5\xB3", "\xC5\xB4" => "\xC5\xB5", "\xC5\xB6" => "\xC5\xB7",
"\xC5\xB8" => "\xC3\xBF", "\xC5\xB9" => "\xC5\xBA", "\xC5\xBB" => "\xC5\xBC", "\xC5\xBD" => "\xC5\xBE",
"\xC6\xA0" => "\xC6\xA1", "\xC6\xAF" => "\xC6\xB0", "\xC8\x98" => "\xC8\x99", "\xC8\x9A" => "\xC8\x9B",
"\xCE\x86" => "\xCE\xAC", "\xCE\x88" => "\xCE\xAD", "\xCE\x89" => "\xCE\xAE", "\xCE\x8A" => "\xCE\xAF",
"\xCE\x8C" => "\xCF\x8C", "\xCE\x8E" => "\xCF\x8D", "\xCE\x8F" => "\xCF\x8E", "\xCE\x91" => "\xCE\xB1",
"\xCE\x92" => "\xCE\xB2", "\xCE\x93" => "\xCE\xB3", "\xCE\x94" => "\xCE\xB4", "\xCE\x95" => "\xCE\xB5",
"\xCE\x96" => "\xCE\xB6", "\xCE\x97" => "\xCE\xB7", "\xCE\x98" => "\xCE\xB8", "\xCE\x99" => "\xCE\xB9",
"\xCE\x9A" => "\xCE\xBA", "\xCE\x9B" => "\xCE\xBB", "\xCE\x9C" => "\xCE\xBC", "\xCE\x9D" => "\xCE\xBD",
"\xCE\x9E" => "\xCE\xBE", "\xCE\x9F" => "\xCE\xBF", "\xCE\xA0" => "\xCF\x80", "\xCE\xA1" => "\xCF\x81",
"\xCE\xA3" => "\xCF\x83", "\xCE\xA4" => "\xCF\x84", "\xCE\xA5" => "\xCF\x85", "\xCE\xA6" => "\xCF\x86",
"\xCE\xA7" => "\xCF\x87", "\xCE\xA8" => "\xCF\x88", "\xCE\xA9" => "\xCF\x89", "\xCE\xAA" => "\xCF\x8A",
"\xCE\xAB" => "\xCF\x8B", "\xD0\x81" => "\xD1\x91", "\xD0\x82" => "\xD1\x92", "\xD0\x83" => "\xD1\x93",
"\xD0\x84" => "\xD1\x94", "\xD0\x85" => "\xD1\x95", "\xD0\x86" => "\xD1\x96", "\xD0\x87" => "\xD1\x97",
"\xD0\x88" => "\xD1\x98", "\xD0\x89" => "\xD1\x99", "\xD0\x8A" => "\xD1\x9A", "\xD0\x8B" => "\xD1\x9B",
"\xD0\x8C" => "\xD1\x9C", "\xD0\x8E" => "\xD1\x9E", "\xD0\x8F" => "\xD1\x9F", "\xD0\x90" => "\xD0\xB0",
"\xD0\x91" => "\xD0\xB1", "\xD0\x92" => "\xD0\xB2", "\xD0\x93" => "\xD0\xB3", "\xD0\x94" => "\xD0\xB4",
"\xD0\x95" => "\xD0\xB5", "\xD0\x96" => "\xD0\xB6", "\xD0\x97" => "\xD0\xB7", "\xD0\x98" => "\xD0\xB8",
"\xD0\x99" => "\xD0\xB9", "\xD0\x9A" => "\xD0\xBA", "\xD0\x9B" => "\xD0\xBB", "\xD0\x9C" => "\xD0\xBC",
"\xD0\x9D" => "\xD0\xBD", "\xD0\x9E" => "\xD0\xBE", "\xD0\x9F" => "\xD0\xBF", "\xD0\xA0" => "\xD1\x80",
"\xD0\xA1" => "\xD1\x81", "\xD0\xA2" => "\xD1\x82", "\xD0\xA3" => "\xD1\x83", "\xD0\xA4" => "\xD1\x84",
"\xD0\xA5" => "\xD1\x85", "\xD0\xA6" => "\xD1\x86", "\xD0\xA7" => "\xD1\x87", "\xD0\xA8" => "\xD1\x88",
"\xD0\xA9" => "\xD1\x89", "\xD0\xAA" => "\xD1\x8A", "\xD0\xAB" => "\xD1\x8B", "\xD0\xAC" => "\xD1\x8C",
"\xD0\xAD" => "\xD1\x8D", "\xD0\xAE" => "\xD1\x8E", "\xD0\xAF" => "\xD1\x8F", "\xD2\x90" => "\xD2\x91",
"\xE1\xB8\x82" => "\xE1\xB8\x83", "\xE1\xB8\x8A" => "\xE1\xB8\x8B", "\xE1\xB8\x9E" => "\xE1\xB8\x9F", "\xE1\xB9\x80" => "\xE1\xB9\x81",
"\xE1\xB9\x96" => "\xE1\xB9\x97", "\xE1\xB9\xA0" => "\xE1\xB9\xA1", "\xE1\xB9\xAA" => "\xE1\xB9\xAB", "\xE1\xBA\x80" => "\xE1\xBA\x81",
"\xE1\xBA\x82" => "\xE1\xBA\x83", "\xE1\xBA\x84" => "\xE1\xBA\x85", "\xE1\xBB\xB2" => "\xE1\xBB\xB3"
);
return strtr(strtolower($string), $utf8_upper_to_lower);
}
Как видиш выбирать есть из чего и заниматься велосипедостроительством не обязательно.
#52
Отправлено 04 Июль 2011 - 22:50
#53
#55
Отправлено 05 Июль 2011 - 17:17
sitecreator (05 Июль 2011 - 14:38) писал:
Если интересуешся для общего развития, без привязки к OpenCart, то с windows-1251 таких проблем нет и быть не может.
В ANSI кодировках, к которым относится windows-1251, каждому символу соответствует один байт. В Unicode одному символу соответствует от 1 до 4 байт, а конкретно в UTF-8 от 1 до 2. Для работы с UTF-8 используется набор многобайтных функций и весь сыр-бор из-за них...
#56
Отправлено 05 Июль 2011 - 18:10
Yesvik (05 Июль 2011 - 17:17) писал:
Я предположил, что есть возможность гибкой смены кодировки как базы данных, так и движка. И такие движки есть. Тот же Modx.
Yesvik (05 Июль 2011 - 17:17) писал:
Я не могу понять почему сделали так неудобно (автоподстановка ...). Неужто нельзя было сделать выпадающим списком?
Например, в первом списочке выбираешь группу атрибутов, а во втором сами атрибуты. А то ведь получается, что еще и все атрибуты нужно заранее знать и помнить как они называются.
#57
Отправлено 07 Июль 2011 - 00:20
#58
Отправлено 07 Июль 2011 - 00:22
#59
Отправлено 07 Июль 2011 - 00:39
Falcosha (07 Июль 2011 - 00:20) писал:
sergfedo (07 Июль 2011 - 00:22) писал:
извините – не удержался.
Зашел в инет от бессонницы, а тут такое
Babushka, озвучьте хоть примерные сроки выпуска, как у Вас дела идут с доработками?
#60
Отправлено 07 Июль 2011 - 11:07
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных
















