Skip to content

Instantly share code, notes, and snippets.

@codedokode
codedokode / Функции работы со строками в PHP и utf-8.md
Last active March 25, 2019 01:18
Функции работы со строками в PHP и utf-8

Статья переехала в мой гитхаб: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md . Ниже идет устаревшая и неточная версия.


Некоторые функции PHP (strlen, substr, а также обращение к строке как к массиву: $str[0]) не работают с многобайтовыми кодировками (вроде utf-8). В utf-8 1 символ закодирован с помощью от 1 до 6 байтов, а эти функции думают, что 1 буква всегда кодируется одним байтом. По этой причине они ломают символы, в результате получаются битые символы и ничего не работает. Потому вместо них надо использовать mb_ функции например mb_strlen, mb_substr. Вместо доступа к строке как к массиву надо использовать mb_substr.

Если тебе интересно, почему эти функции поддерживают только однобайтные кодировки, а не многобайтные, то причина в том, что они очень старые и написаны в то время (лет 40 назад) когда utf-8 и многобайтных кодировок еще не было.

Давай разберем пример. Допустим, у нас есть строка из русской буквы «щ» в кодирове utf-8. Попытаемся взять первую букву с п

@codedokode
codedokode / Паттерны работы с базой данных.md
Last active September 23, 2024 10:27
Паттерны работы с базой данных

Это старая версия урока, которая больше не обновляется. Новая версия расположения тут: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md


Паттерны работы с базой данных

Разберемся, как правильно с применением ООП сохранять и загружать данные из базы. Существуют такие подходы:

Этот урок переехал в мой гитхаб: https://github.com/codedokode/pasta/blob/master/php/exceptions.md - ниже представлена старая версия, потому советую перейти и прочитать новую.


Как использовать исключения в PHP

Если ты изучаешь ООП, ты наверняка натыкался на исключения. В мануале PHP описаны команды try/catch/throw и finally (доступна начиная с PHP 5.5), но не объясняется толком как их использовать. Чтобы разобраться с этим, надо узнать почему они вообще были придуманы.

А придуманы они были, чтобы сделать удобную обработку ошибок.

@codedokode
codedokode / Путь HTML.md
Last active September 14, 2024 07:28
Путь HTML/CSS

Путь HTML/CSS

Это список ссылок и заданий, которые помогут тебе изучить языки HTML/CSS на достаточном уровне. HTML и CSS используется для верстки (создания) веб-страничек — тех самых, которые ты видишь в браузере когда открываешь какой-то сайт. Задания несложные и надо решить их все.

Станешь ли ты полноценным верстальщиком, пройдя этот путь? Скорее нет, чем да. С одной стороны, ты научишься верстать веб-страницы, с другой стороны от верстальщиков в большинстве случаев требуют дополнительно знать язык программирования Javascript (и популярные библиотеки вроде jQuery, jQuery UI). Так что воспринимай это как первую (короткую) половину пути.

Время, требуемое на изучение материала и решение всех заданий зависит от тебя, ориентировочно это занимает от 2 до 8 недель. В конце тебя ждет главное задание — сверстать страницу из макета.

Что такое HTML

@codedokode
codedokode / getset.sublime-snippet
Created November 9, 2014 00:21
Сниппет для создания геттеров/сеттеров в Sublime Text 3. Вызывается через gs [tab]
<snippet>
<content><![CDATA[
public function get${1/(?:^|_)(\w)/\U$1$2/g$1}()
{
return \$this->$1;
}
/**
* @return self
*/
@codedokode
codedokode / Тестирование.md
Last active November 16, 2025 22:40
Автоматизированное тестирование

Автоматизированное тестирование

Обычно после написания кода его проверяют. Если речь о какой-то функции, то можно написать простой скрипт, который будет вызывать ее с разными аргументами, и смотреть, что она вернет. Если вы сделали сайт или приложение, то вы открываете его, жмете ссылки и кнопки, проверяете что все отображается верно. Это называется ручное тестирование или QA (Quality Assurance — контроль качества) — человек проверяет работу программы. Если мы попробуем автоматизировать этот процесс, и написать программу, которая проверяет правильность другой программы, то это называется автоматизированное тестирование.

Главный плюс автоматических тестов — то, что они выполняются намного быстрее, чем ручное тестирование, и вам не надо тратить на это свое время (или время тестировщика). Это позволяет запускать их хоть после каждого изменения в коде.

Также, тесты позволяют «защитить» написанный код. Если кто-то в команде (или вы сами) нечаянно «сломал» ваш код, тесты это обнаружат и укажут, что именн

@codedokode
codedokode / Особенности сравнения строк.md
Last active March 30, 2021 12:05
Особенности сравнения строк

Эта статья перенесена сюда: https://github.com/codedokode/pasta/blob/master/php/collation.md Ниже идет старая, неподдерживаемая версия статьи.


В программировании строки можно сравнивать. При этом обычно подразумевается алфавитное сравнение, то есть меньше то слово, которое идет раньше по алфавиту. Если начальные буквы совпадают, то меньше то слово, которое короче. Например, "аббат" < "аккорд", "кот" < "котёнок".

Если разобраться в теме сравнения строк на любых языках (а не только на русском), то все выглядит гораздо сложнее и появляется много особенностей, которые надо учитывать(по-английски эта тема называется «collation»). И проблема не в том, что там много букв из разных алфавитов, а в том что одни и те же буквы имеют разный порядок в разных языках. Например, буквы с точечками и черточками сравниваются по-разному: http://en.wikipedia.org/wiki/Alphabetical_order#Language-specific_conventions

В некоторых языках буквы вроде å идут после z, в некоторых между a и b. В некорых (английский) они им

@codedokode
codedokode / proxy.php
Created December 23, 2016 22:22
Простой прокси-сервер на PHP для изучения и модификации данных, передаваемых между браузером и сторонним сервером
<?php
/**
* Простой прокси-сервер на PHP для изучения и модификации данных,
* передаваемых между браузером и сторонним сервером.
*
* Запуск:
*
* указать URL сайта в $base
* php -S 127.0.0.1:9001 proxy.php
*
@codedokode
codedokode / fix-broken-threads.php
Created June 5, 2018 19:56
Скрипт исправления сломанных тредов 1, 4b и 15
<?php
use Symfony\Component\DomCrawler\Crawler;
use phpClub\Util\DOMUtil;
set_time_limit(0);
require __DIR__ . '/../vendor/autoload.php';
$di = require __DIR__ . '/../src/Bootstrap.php';
/**
@codedokode
codedokode / broken-thread-maps.txt
Created June 6, 2018 16:43
Программа обнаружения повторяющихся фрагментов текста и результат ее применения к сломанным тредам
/tmp/threads/pr-thread-4-272705-m2ch-18-may-google.html
Total repeats: 185567 of 454322 bytes
- 0 - 41080 | \n<meta http-equiv="Content-Type" content ... ss="reply" id="27307
first 1 41081 - 85327 | 5"><div class="pst_bar"><span class="pos ... ://m2-ch.ru/pr/res/2
second 1 85328 - 129574 | 5"><div class="pst_bar"><span class="pos ... ://m2-ch.ru/pr/res/2
- 129575 - 129593 | 72705.html#273385">
first 2 129594 - 177012 | &gt;&gt;273385</a><br><br><span class="u ... ;А если надо сюда HT
- 177013 - 177034 | 72705.html#273385"&gt;
second 2 177035 - 224453 | &gt;&gt;273385</a><br><br><span class="u ... ;А если надо сюда HT
- 224454 - 224621 | ML-тегов с аттрибутами добавить? У тебя ... виджет сделан.</span