Русский язык в PDOtools WHERE
[[!pdoUsers?
&sortdir=`DESC`
&tpl=`user`
&where=`{"`modUserProfile`.`extended`:LIKE":"%\"callsign\":\"РУССКИЙ ЯЗЫК\"%"}`
]]
строка в базе{"callsign":"\u041f\u0440\u0438\u0432\u0435\u0442"}
Не выводит ничего. Как исправить? Комментарии: 6
При добавлении данных в доп поле modx записывает как есть строку
тобишь доп поле callsign он записывает в базу прям как есть
Теперь образовалась проблема как сделать запрос LIKE с русским
или
как научить modx декодировать и записывать в базу уже в нормальном виде русский
тобишь доп поле callsign он записывает в базу прям как есть
{"callsign":"\u041d\u0435\u0442"}
вместо того чтобы перевести в русский и хранить в базе на понятном языкеТеперь образовалась проблема как сделать запрос LIKE с русским
или
как научить modx декодировать и записывать в базу уже в нормальном виде русский
вместо того чтобы перевести в русский и хранить в базе на понятном языкеПриплыли. Это и есть русский, в кодировке UTF-8, просто экранированный.
Возможность кодирования UTF-8 в JSON без экранирования появилась только в PHP 5.4, когда MODX Revolution уже во всю работал. Естественно, никто не будет увеличивать минимальную версию PHP для MODX только ради этой функции.
как научить modx декодировать и записывать в базу уже в нормальном виде русскийВыходит, что никак.
Но можно хранить эти данные в modUserSetting в виде key => value или создать отдельную таблицу.
Так кодирует json_encode. Ну и кодируйте также через сниппет
[[!pdoUsers?
&sortdir=`DESC`
&tpl=`user`
&where=`[[!convertWhere? &cond=`%"callsign":"РУССКИЙ ЯЗЫК"%`]]`
]]
Сниппет convertWhere$a = array('modUserProfile`.`extended`:LIKE'=>$cond);
return json_encode($a);
Не тестировал. По идее должен работать.
Сергей, я делал сниппет на подобие
НО есть особенность,
при вызове pdoUsers с параметром return sql то в тексте лайк автоматом становится обычный UTF8 понятный глазу (((
запрос типа
Это наверное не реал осуществлять поиск русского текста в доп полях пользователя.
Хотя у вас опыта больше может и сможете помочь, а моих знаний не хватает.
Как то делают связанную таблицу но я не соображу как это делать, где бы была инструкция я бы с удовольствием повторил
НО есть особенность,
при вызове pdoUsers с параметром return sql то в тексте лайк автоматом становится обычный UTF8 понятный глазу (((
запрос типа
LIKE":"%\"callsign\":\"\\\u041d\\\u0435\\\u0442\"%
невозможен ибо происходит перекодировка налету до обращения к базеЭто наверное не реал осуществлять поиск русского текста в доп полях пользователя.
Хотя у вас опыта больше может и сможете помочь, а моих знаний не хватает.
Как то делают связанную таблицу но я не соображу как это делать, где бы была инструкция я бы с удовольствием повторил
Ну тут мне нечем помочь. Опыта у меня не больше, чем в вас. Пробуйте вариант Василия.
вот такой сниппет делал
$string = $modx->getOption('string', $scriptProperties, '');
$string = json_encode($string); // кодируем в JSON строку
$string = str_replace(array("'",'"'),'',$string); // убрать кавычки
$string = str_replace('\\','\\\\\\', $string); // экранировать обратные слеши
return $string;
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.