Месечен архив за април, 2006

PHP: RegExp проблем с кирилицата

Публикувано на 27 април 2006 от Ицката в Интернет и уеб

За един от последните си сайтове писах една търсачка, на php. За търсенето ползвах регулярни изрази (т. нар. regular expressions), по-конкретно функцията preg_match. Като първи параметър на функцията се задава филтъра, по който се прави търсенето. Ако в края на стринга за филтъра има "i", това означава, че се прави case insensitive match, т.е. търсене без да прави разлика между главни и малки букви.

Дотук добре – реших да ползвам тази опция, дали търсенето да прави разлика между големи и малки букви или не. В първия случай слагам във филтъра думата, по която се търси, а във втория – отзад слагам едно i – за case insensitive. Вкъщи сървъра ми е Windows базиран – нямаше проблеми – функцията работеше. Сървъра дето се хоства сайта, обаче, е Линукс и имаше проблем с кирилицата – дори да му задавам case insensitive match, то винаги си правеше case sensitive, и то само за кирилицата – голям проблем.

Поразпитах из БГ форумите, най-адекватно решение ми даде Бабата от ФлашБГ (за което съм много благодарен) – във филтъра всяка буква от думата по която се търси да я правя в група с голяма и малка буква. Не ме разбрахте? Пример: търсиме за думата ‘нещо’, искаме да не прави разлика между големи и малки букви. Стандартно филтъра щеше да ни е от вида

preg_match ("/нещо/i",$text);

обаче туй нящо под Линукс не ще. Ще ни върне само и само думата "нещо", като думи като "Нещо", "нЕщО" и "неЩО" например ще пропусне. Решението на Бабата:

preg_match ("/[Нн][Ее][Щщ][Оо]/",$text);

За какво иде реч? [ и ] означават, че се търси само за един от знаците между тях, т.е. в нашия случай [Нн] ще търси за Н или н, което ни устройва. Дотук добре, остава обаче да напишем функция за създаване на подобен филтър динамично, т.е. имаме променлива с ключовата дума, задаваме я на функцията и тя ни връща филтъра. Ето какво написах:

// Конкретно на моя сървър фунцкиите strtolower и strtoupper отказаха да работят за кирилица, затова си написах мои:

function cstrtolower($str) {
   return strtr($str, "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ", "абвгдежзийклмнопрстуфхцчшщъьюяabcdefghijklmnopqrstuvwxyz");
}

function cstrtoupper($str) {
   return strtr($str, "абвгдежзийклмнопрстуфхцчшщъьюяabcdefghijklmnopqrstuvwxyz", "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ");
}

// Същинската функция:

function createFilter ($string) {
    $string = cstrtolower($string);
    for ($i=0;$i<strlen($string);$i++) {
        $letter_small = substr($string,$i,1);
        $letter_big = cstrtoupper($letter_small);
        $newstr .= ‘['.$letter_small.$letter_big.']‘;
    }
    return $newstr;
}

Това е, надявам се на някого да свърши работа. А – и друго – при мен също не работеше филтъра ако искам да търси за цяла дума, това пак при кирилицата. Решението: вместо

preg_match ("/\b[Нн][Ее][Щщ][Оо]\b/", $text);

ползвайте

preg_match ("/[^A-Za-zА-Яа-я][Нн][Ее][Щщ][Оо][^A-Za-zА-Яа-я]/", $text);

Полезен сайт за регулярните изрази и филтрите.

Още един нов сайт

Публикувано на 27 април 2006 от Ицката в Интернет и уеб, Портфолио

Тука доста неща се струпаха и нямам време да пиша затова сега ще предоставя всичко накуп. В различни постове, естествено.

И така, тия дни скалъпих още едно сайтче – въпросният сайт. Дизайн – нищо особено – хората така си го искаха. Менюто е флаш, ако нямаш флаш, или версията на флаш е по-стара от 8, се зарежда html меню. Направил съм падащи подменюта (JavaScript), ако юзера няма JavaScript всяка страница зарежда динамично едно каре вляво, в което се съдържа един вид менюто (всички страници) на съответната подкатегория. Съдържаниетио се съхранява в база данни, клиентът може сам да го обновява. Мисля, че съм помислил за всичко. И те са доволни ;-)

Безобразие!

Публикувано на 24 април 2006 от Ицката в Общи приказки

http://www.bovineunite.com/main.htm

Видях този линк днес във форумите на ФлашБГ. Нямам думи – баси нещастниците! Защо? Отворете сайта и ще разберете…

Христос Воскресе

Публикувано на 23 април 2006 от Ицката в Общи приказки

Честит Великден! Христос възкръсна, ще видим дали и ние утре ще възкръснем след днешното пиене :-D

44 Минути, Крал Артур, Мъж Под Прицел

Публикувано на 22 април 2006 от Ицката в Филми

В последно време не ми остава много свободно време да гледам филми, но докато бях болен поизгледах някой и друг. Сега вече си пускам TV-out-a и филмите от компа ми си ги гледам на телевизора – доста е удобно.

44 Минути

Филма е по действителен случай, разказва се за едни закоравели престъпници които решават да оберат една банка, нещо се обърква и тия почват да стрелят ‘на месо’ абсолютно навсякъде. Тежко въоръжени са, имат Калашников (АК-47) и солят наред. Ако ви се гледа екшън съветвам ви да си го намерите. Много як филм. Преди малко видях че го има в торентите на ДатаБГ (аз го гледах на ДВД).

Крал Артур

Режисьорска версия. Разказва историята на Артур и рицарите от кръглата маса. Също доста добър филм, битките са направени доста добре – добре окървавени са.

Мъж Под Прицел

Най-после го гледах и него. Става дума за един бивш военен (Дензъл Уошингтън), който не е много доволен от живота си. Наемат го като телохранител на едно богаташко отроче в Мексико Сити, тъй като по това време стават масови отвличания с цел откуп. Детето успява да промени живота на своя бодигард, като му връща смисъла на живота. В крайна сметка обаче похитители успяват да отвлекат момичето, и нашият герой се впуска в саморазправа, търсейки справедливост. Препоръчвам ви го.