Jako, że zbliża się koniec ważności mojego konta na DreamHost, a przedłużać go zamiaru nawet namniejszego nie mam, zaczęłem się przygotowywać do migracji. Jeszcze nie wiem gdzie pójdę sobie, ale pójdę na pewno :)

Jedną z rzeczy z tym związanych jest usunięcie mojego repo (repo.urzenia.net). Cała jego zawartość znajdzie się niedługo jako konkretne projekty na code.google.com. W sumie już wszystko przeniosłem, poza BlipApi.php, które też się tam niedługo znajdzie. Nowe adresy projektów to:

mPack
zestaw bibliotek pomocnych przy tworzeniu serwisów w PHP: m-pack.googlecode.com.
useless-scripts
kilka skryptów które wykorzystuje w mojej codziennej pracy na komputerze: useless-scripts.googlecode.com. Tutaj też dostał się mój ostatni “produkt” killer.pl.
WP Blip!
Plugin do WordPressa, wyświetlający na nim ostatnie wpisy z serwisu Blip!: wp-blip.googlecode.com.

Jakiś czas temu, na forum 4programmers.net przewinął się temat skracania tekstu. Temat o tyle skomplikowany, że chodziło o skrócenie głównej treści artykułu, zostawiając w nim wszystkie znaczniki. Problemy tutaj są dwa (podstawowe):

  1. dbanie o nieucinanie znaczników, żeby każdy rozpoczęty był we właściwej kolejności zakończony
  2. skracanie tekstu tak, żeby długość widocznego tekstu nie była skracana o tekst znaczników

W przytoczonym wątku problemem są tagi BBCode, które mogą mieć różne formy:

[tag]treść[/tag]
[tag=coś]treść[/tag]
[tag]

Trzeba pamiętać (na co mi zwrócono uwagę w przytoczonym wątku), że w takim np. tagu [url] może być zawarty adres URL, który nie może zostać ucięty. Skrócony może zostać tylko i wyłącznie tekst zawarty między znacznikiem rozpoczynającym a kończącym.

Sposób, na jaki wpadłem, opierał się na rozbiciu tekstu na poszczególne części za pomoca preg_split, i późniejszej obróbki powstałej w ten sposób tablicy. Po ominięciu pewnych trudności z kombinacjami takimi jak:

[url][img=aa]coś coś[/img][/url]

skonstruowałem funkcję, której można użyć do tego celu.

Jeśli komuś mogłaby się ona przydać (a myślę że więcej osób może mieć tego typu problem), to zapraszam do skorzystania z gotowca :).

W przypadku, gdy ktoś nie korzysta z BBCode’u, można użyć do tego celu parsera XML (zakładam korzystanie z XHTML raczej, niż HTML). Dodałem podobną funkcjonalność do mojej klasy mParser, która docelowo służy do filtrowania w tekście pobranym od użytkownika niebezpiecznych danych.


Takie coś sobie postawiłem: repo.urzenia.net. Będę tam umieszczał jakieś swoje wypociny, które powstają w chwilach które powinienem poświęcać na sen, a poświęcam je na kod ;)

W tej chwili jest tam aż jedna klasa (getGPC), ale może niedługo dorzucę jeszcze kilka swoich produktów.


Zainspirowany klasą autorstwa hwao, ruszyłem dziś do boju. Tak na szybko stworzyłem własną klasę do pobierania danych od usera, nazwaną getGPC. Można ją tymczasowo znaleźć pod adresem http://urzenia.net/wp-content/getgpc (nie klikalny, jako że ten adres niedługo ulegnie zmianie).

UPDATE
Klasa sporo sie zmieniła dziś nad ranem, a przed chwilą zmieniło się też miejsce przebywania klasy. Aktualna specyfikacja i instrukcja znajduje się na świeżo otwartym repo.urzenia.net, a źródła klasy są pod adresem repo.urzenia.net/files/.

Poniższe informacje można uznać za deprecated

Sposób użycia:

$r = getGPC::init([$source][, $sqlEscapeFun]); //użyty singletone
echo $r->getString($name[, $default][, $source][, $html][, $sql][, $syntax]);

Gdzie:

$source = getGPC::AUTO
pochodzenie zmiennej:

  • getGPC::POST - jeśli z $_POST
  • getGPC::GET
  • getGPC::COOKIE
  • getGPC::REQUEST
  • getGPC::AUTO - wtedy przeszuka kolejno $_POST, $_COOKIE, $_GET i $_REQUEST, i zwróci pierwszą znalezoną wartość
$sqlEscapeFun = ‘mysql_real_escape_string’
funkcja jaka zostanie użyta do escape’owania danych podczas przygotowania danych do wrzucenia do sql. Jeśli chcemy użyć takiego np. PDO::quote(), robimy to tak:$getgpc_instance->sqlEscapeFun=array($pdo_instance, 'quote');
$name
nazwa szukanej zmiennej (lub tablica takich nazw)
$default
zwracana wartość domyślna, jeśli zmienna nie istnieje (jeśli null, to przy braku zmiennej będzie rzucony wyjątek)
$html = false
jesli true to zamiani znaki <, >, " i ' na encje: &lt;, &gt;, &quot;, &#39;,
$sql = false
użyje funkcji ustawionej za pomocą getGPC::$sqlEscapeFun do zabezpieczenia się przed SQL Injection (tak naprawdę tutaj można podstawić dowolną funkcję, ale myślę że takie użycie będzie najpopularniejsze).
$syntax = false
ciąg znaków odpowiadający pierwszemu parametrowi funkcji sprintf. Jako kolejne parametry zostaną użyte podane wszystkie wartośći zmiennych podanych jako parametr $name metody getGPC::get[String|Int|Bool].

Wczoraj, w ramach nauki phpdoc udokumentowałem, najlepiej jak potrafiłem, str_nl2br(). Poprawiłem i zmieniłem kilka rzeczy (changelog pod powyższym adresem), i udostępniam światu :)

Dokumentacja nie jest jeszcze najświeższa, bo nie mogę uruchomić chwilowo phpdoca pod linuksem (w sensie: zainstalować) ale to się nadrobi.

Przy okazji zmienił się adres. Obecny: http://urzenia.net/proj/misc/nl2br/. Zapraszam :)

UPDATE:

str_nl2br() przekształcił się w klasę mParser dostępną w moim repo.