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 (klasa dostępna w pakiecie mPack).

UPDATE:

Zaktualizowałem linki.


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].