Как подружить UTF-8 и PHP
При работе с UTF-8 привычные функции работы со строками перестают корректно работать. В этом не трудно убедиться если сохранять исходник страницы в UTF-8:
print strlen("тест"); //8
Вместо привычных strlen, strpos, substr следует использовать соответствующие многобайтные аналоги: mb_strlen, mb_strpos, mb_substr. Но это делает код плохо портируемым под другие кодировки, увеличивает вероятность ошибок, и вообще это не удобно. К счастью расширение mbstring позволяет переопределить эти функции автоматически.
добавляем в .htaccess
php_value mbstring.internal_encoding "UTF-8" php_value mbstring.func_overload 7
проводим эксперимент:
print strlen("тест"); //4
...что и требовалось доказать. Конечно, теперь всегда нужно иметь в виду, что при вызове strlen на самом деле вызывается mb_strlen это всегда нужно учитывать, особенно, если ваш файл будет сохранен не в UTF-8, но зато код станет хорошо портируемым и не зависящим от кодировки исходников.
P.S. Как показала практика, такое решение полезно только если проект маленький, если же вы собираетесь использовать сторонниие библиотеки, то лучше все же создать дополнительный уровень абстакции для работы со строками - простая подмена функций приводит к непредсказуемым результатам!
Android
Ответье мне на вопрос. Не понимаю. Andorid - это нормальная Линукс среда, с виртуальной памятью, с нормальным разделением прав, со всеми возможными средствами ввода вывода, ядром... Нахрена спрашивается запускать приложения в собственной виртуальной Java машине? Там где каждый дополнительный такт процессора означает увеличение потребляемой мощности они запускают приложения собранные не из машинных кодов а используя Java байткод, который еще неизвестно как выполняется Java машиной... Что - линукс недостаточно защищен? Неужели ребята просто заинтересованы чтобы рынок приложений для Android был только для Android, а всевозможные уже написанные приложения для Linux были бы несовместимыми с Android-мобильниками - попахивает обыкновенным саботажем.
UPD. Нашел ответ: Android построен на ядре Linux, а прикладные приложения выполняются в виртуальных машинах (sandbox) и для их разработки используется Java. Или, вернее, язык с синтаксисом Java и библиотеки аналогичные Java SE. А в качестве среды исполнения вместо JVM используется виртуальная машина Dalvik.
...все дело в лицензионной политике. В случае с Java ME, Sun продемонстрировала просто чудеса иезуитства изобретательности, выпустив ее сразу под двумя лицензиями: GPLv2 и коммерческой. А это вынуждает производителей, использующих Java ME либо открывать весь свой код, либо... платить Sun :)
Естественно, все это не укладывалось в рамки политики, которую избрал Google для продвижения Android. В отличие от Sun, у которой хорошие юристы, Google решил положиться на своих инженеров и... создал свою реализацию виртуальной машины. Причем, Dalvik - это не просто новая реализация JVM (которую все едино пришлось бы лицензировать в Sun), Dalvik вообще не использует Java байт-код (вернее байт-код, полученный в результате компиляции в design-time преобразуется в dex формат, который и используется в run-time). В общем, инженеры Google обставили лоеров Sun.
В то время как Apple делает iPhone невероятно сладким, лакомым кусочком для разработчиков игр, но в тоже время делает его и невероятно закрытым. Google не только делает Andriod открытым для разработчиков мобильных устройств но и дает возможность миллионам существующих Java программистов стать разработчиками под Andriod.
А ведь умно...
Полезное свойство функции substr в PHP
Функция substr служит для взятия подстроки, синткасис у нее следующий:
string substr ( string string, int start [, int length] )
Допустим, вам нужно отрезать последний символ, знатоки Javascript или Си напишут примерно следующее:
$s = 'some string1'; $s = substr($s,0,strlen($s)-1); //some string
пока терпимо, хотя код уже явно громоздкий и трудный для понимания, задача усложняется если нужно получить несколько последних символов в строке:
$s = 'some string123'; $s = substr($s,strlen($s)-4); //123
понять что делает этот код довольно трудно, несмотря на то что его назначение тривиальнейшее.
К счастью в PHP в substr можно использовать ОТРИЦАТЕЛЬНЫЕ ЗНАЧЕНИЯ для стартового символа и длинны:
//пример первый $s = 'some string1'; $s = substr($s,0,-1); //some string //пример второй $s = 'some string123'; $s = substr($s,-3); //123
Кака видно, в этом случае код читается на порядок проще. Ничего подобного нет ни в Си ни в JavaScript, а жаль.
Вредные советы PHP программистам
- делайте функции как можно длиннее. Прошли времена глупых и тупых программистов, если комуто в падлу прочитать код на пятисяти скринах - разжаловать его в грузчики!
- побольше глобальных перемнных. Глобальные переменные жрут память - ну и фиг с ней, пусть клиент купит еще планочку - не разорится
- в жопу комментарии. Кому надо сам разберется что к чему!
- у функций должно быть побольше аргументов. И функции должны возвращать как можно больше полезной информации - те кому прийдется разбираться в вашем коде будут счастливы.
- чем больше листинг тем круче. Если в файле листинга меньше десяти тысяч строк кода - это и не листинг вовсе.


