2012-02-02
PHP, кодировки и строковые функции
Время от времени возникает у разработчиков проблема - не желают работать стандартные функции strtolower, strtoupper, ucfirst. Особенно это актуально для сайтов, в которых есть файлы нескольких видов кодировок. Видел я решение самописное, вот такое:
strtr(
$s,
'йцукенгшщзхъфывапролджэячсмитьбюё',
'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ'
);
strtr(
$s,
'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ',
'йцукенгшщзхъфывапролджэячсмитьбюё'
);
strtr(
substr($s,0,1),
'йцукенгшщзхъфывапролджэячсмитьбюё',
'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ'
).substr($s,1) ;
При использовании кодировки UTF-8 начинают сбоить и такие методы. С радостью обнаружил готовые функции, предназначенные для работы с многобайтными кодировками. Вы легко это найдете, но пусть хорошей информации будет побольше.
mb_convert_case($str, $mode [, $encoding ]);
$str - строка для обработки.
$mode может быть MB_CASE_UPPER (верхний регистр), MB_CASE_LOWER (нижний регистр) или MB_CASE_TITLE (первая буква в верхнем регистре).
$encoding может быть, например 'UTF-8'. Если не указывать, то вместо него будет использовано значение внутренней кодировки.
Есть укороченные варианты для MB_CASE_UPPER и MB_CASE_LOWER:
mb_strtolower($str [, $encoding]);
mb_strtoupper($str [, $encoding]);
P.S. Прошу не судить строго за бояны.
2011-11-15
Web-версия Evernote без рекламы
Для тех, кто пользуется сервисом облачных заметок Evernote (evernote.com) есть два варианта: бесплатный аккаунт и про-версия с регулярными взносами. Понятно, что платная предоставляет определенные плюшки, но меня они совершенно не убеждают расставаться с кровно заработанными, да и пользуюсь этим сервисом не настолько активно. К тому-же, для Linux существует только веб-версия.
Как оказалось, это не всегда плохо! Как ни крути, а в интернете шила в мешке не утаить, то есть код всегда на виду. Поэтому, для тех, кто пользуется, но не хочет смотреть рекламу, сей опус.
Устанавливаем, если не установлено, и регистрируемся:
Запускаем, логинимся, наблюдаем рекламу. Правой кнопочкой на нее кликаем, и видим класс элемента с рекламой, запоминаем:
Отправляемся на WebStore за дополнением к браузеру, которое даст нам возможность выполнять свой JavaScript код на избранных страницах:
Лезем в настройки этого плагина:
И вписываем для страницы веб-версии такой вот код (наверно, можно и получше, но так зато работает):
Сохраняем, перезаходим в веб-версию. Красота!
Чтобы скопировать, приведу код в текстовом виде:
var i=setInterval(function(){
var el=$('div.GHOV4EUDAB').parent();
if(el){
el.prev().css('bottom','0px').prev().css('bottom','35px');
el.remove();
clearInterval(i);
}
},1000);
2011-09-13
С WWW => без WWW
Ситуация: на сайте есть отличия в отображении контента в зависимости от того, какой адрес в адресной строке браузера.
Задача: нужно, чтобы каждый пришедший по ссылке www.site.ru попадал на site.ru, т.е. без www.
Решение: в файл .htaccess прописываем правило:
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
Задача: нужно, чтобы каждый пришедший по ссылке www.site.ru попадал на site.ru, т.е. без www.
Решение: в файл .htaccess прописываем правило:
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
2011-08-30
MySQL : получение строк в заданном порядке
Да, понадобилось, и почему-то не сразу понял как, пришлось гуглить. Нужно сортировать строки не через ORDER BY и не абы как, а строго в заданном порядке. Оказывается, можно, и в документации об этом написано, так что "курите маны", как говорится.
SELECT id,title,description FROM article WHERE id in (1,2,3,4,5) ORDER BY find_in_set(id,'1,2,3,4,5');
SELECT id,title,description FROM article WHERE id in (1,2,3,4,5) ORDER BY find_in_set(id,'1,2,3,4,5');
2011-08-26
GIMP и ошибка при попытке создать Slice
Вообще-то я очень редко использую эту возможность. Но вот недавно стал делать для сайта а-ля модальное окно с тенью вокруг. Нарисовал в GIMP квадрат с тенью, стал резать - а вот шиш вам, ошибка.
Решается она так. Открываем с правами рута файл
gksudo gedit /usr/lib/gimp/2.0/plug-ins/py-slice.py
Находим строку, начинающуюся с "temp_image.crop" и меняем ее так:
temp_image.crop(int(right - left), int(bottom - top), int(left), int(top))
Ошибка исчезла. Она возникала в связи с передачей функции параметров типа float, в то время как она ожидала тип int.
Всё работает.
P.S. Окно кстати я доделал. Формируется на лету с помощью JavaScript, получилось вот такое:
Решается она так. Открываем с правами рута файл
gksudo gedit /usr/lib/gimp/2.0/plug-ins/py-slice.py
Находим строку, начинающуюся с "temp_image.crop" и меняем ее так:
temp_image.crop(int(right - left), int(bottom - top), int(left), int(top))
Ошибка исчезла. Она возникала в связи с передачей функции параметров типа float, в то время как она ожидала тип int.
Всё работает.
P.S. Окно кстати я доделал. Формируется на лету с помощью JavaScript, получилось вот такое:
Подписаться на:
Сообщения (Atom)








