PHP и JavaScript: парочка полезных функций
Уверен, что у каждого программиста есть свой hot list полезных функций, которые должны быть постоянно под рукой. У меня в этот list входят также несколько конструкций, классов и интерфейсов, которыми я часто пользуюсь. В планах - добавить сюда же некоторые полезные алгоритмы. Но это позже… Сейчас хочу поделиться двумя функциями с вами, может кто-то возьмет эти функции себе на вооружение, может кто-то предложит более эффективные!
аutoencode() - простое декодирование строки
Итак, начнем с пары функций, которые я постоянно использую для управления кодировкой. Про эту функцию мне напомнил в комментариях к прошлому посту читатель none. Проблема в том, что при использовании в приложениях jQuery ajax-запросов нужно следить за тем, чтобы кодировка “жестко равнялась” UTF. Иногда этого добиться очень сложно. Например, у меня в прошлом примере база работала в кодировке cp1251, а отдавать результат нужно в UTF-8.. Но это только пол проблемы, немного поднапрягшись можно “переделать” базу данных. Но иногда
а) это невозможно
б) мы заранее не знаем в какой кодировке получим входные данные (например, реализуем класс для использования в стороннем коде)
В этих случаях можно пользоваться связкой таких функций:
function is_utf8($string) { /* ** Функция определяет является ли строка UTF */ for ($i=0; $i<strlen($string); $i++) { if (ord($string[$i]) < 0x80) continue; elseif ((ord($string[$i]) & 0xE0) == 0xC0) $n=1; elseif ((ord($string[$i]) & 0xF0) == 0xE0) $n=2; elseif ((ord($string[$i]) & 0xF8) == 0xF0) $n=3; elseif ((ord($string[$i]) & 0xFC) == 0xF8) $n=4; elseif ((ord($string[$i]) & 0xFE) == 0xFC) $n=5; else return false; for ($j=0; $j<$n; $j++) { if ((++$i == strlen($string)) || ((ord($string[$i]) & 0xC0) != 0x80)) return false; } } return true; } function autoencode($string, $encoding='utf-8') { /* ** Декодирует строку в указанную кодировку */ if (is_utf8($string)) $detect='utf-8'; else { $cp1251=0; $koi8u=0; $strlen=strlen($string); for($i=0;$i<$strlen;$i++) { $code=ord($string[$i]); if (($code>223 and $code<256) or ($code==179) or ($code==180) or ($code==186) or ($code==191)) $cp1251++; // а-я, і, ґ, є, Ї if (($code>191 and $code<224) or ($code==164) or ($code==166) or ($code==167) or ($code==173)) $koi8u++; // а-я, є, і, ї, ґ } if ($cp1251>$koi8u) $detect='windows-1251'; else $detect='koi8-u'; } if ($encoding==$detect) return $string; else return iconv($detect, $encoding."//TRANSLIT", $string); }
Аналог str_replace() для JavaScript
Функцию str_replace() для PHP я использую достаточно часто. Она настолько удобна, что когда я пишу на JavaScript, иногда чувствую себя связанным по рукам и ногам.
Поэтому пользуюсь вот этим чудным аналогом от Kevin van Zonneveld (функция принимает те же параметры и возвращает тот же результат).
function str_replace ( search, replace, subject ) { // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + improved by: Gabriel Paderni if(!(replace instanceof Array)){ replace=new Array(replace); if(search instanceof Array){//If search is an array and replace is a string, then this replacement string is used for every value of search while(search.length>replace.length){ replace[replace.length]=replace[0]; } } } if(!(search instanceof Array))search=new Array(search); while(search.length>replace.length){//If replace has fewer values than search , then an empty string is used for the rest of replacement values replace[replace.length]=''; } if(subject instanceof Array){//If subject is an array, then the search and replace is performed with every entry of subject , and the return value is an array as well. for(k in subject){ subject[k]=str_replace(search,replace,subject[k]); } return subject; } for(var k=0; k<search.length; k++){ var i = subject.indexOf(search[k]); while(i>-1){ subject = subject.replace(search[k], replace[k]); i = subject.indexOf(search[k],i); } } return subject; }
Спонсор поста: Ищите кому доверить свой сайт? Комплексная оптимизация сайтов и раскрутка сайтов.
Понравился пост? Будь в курсе последних событий: подпишись на RSS-ленту.!
Также читайте по теме:
- 29 ноября

спасибо мне помогло
Спасибо, пригодятся функции

хотя я на стороне сервера предпочитаю использовать iconv() и всё
НОНЕ а я уже давно перестал использовать iconv
Моя функція autoencode пішла в народ))))
http://mrgall.com/blog/2008/02/13/autoencode/
А навіщо додавати //TRANSLIT ?
Щас отказался от iconv он менее удобен
MrGALL интересная у вас функция
Спасибо за аutoencode() - закрыл у себя тикет!
[...] про финкризис. Качаев реально по понятиям нима базара отпехапечил! И ты хош в постовойшвили? На кой те нужно такое [...]
[...] про финкризис. Качаев реально по понятиям нима базара отпехапечил! И ты хош в постовойшвили? На кой те нужно такое [...]
[...] про финкризис. Качаев реально по понятиям нима базара отпехапечил! И ты хош в постовойшвили? На кой те нужно такое [...]
Спасибо! То, что нужно!
Спасибо, всегда не хватало этой функции в яваскрипте -))