The Diary
Дневника на Сашо
<- Предишен запис (2009-05-19) | Дневника | Следващ запис (2009-06-20) ->
Архив
Понеделник, 15 Юни 2009
Кълнях се че няма да пиша софтуер, но отново пиша!!! НЕ на фрилансерите и фрилансерството!!!Колкото и да се кълнях че няма повече да пиша какъвто и да е софтуер се оказа че не мога да си удържя на думата. Отново правя някакви напъни да пиша на PHP, и забелязвам че... нямам опит. Пиша много бавно, кода все едно че е лиснат с кофа по файловете. Няма стил. Прочетох 2 книги за защита на PHP кода от външни нападения и сега правя по 330 проверки от формите към базата, а след това от базата към апликейшъна, евентуално ако са ме ударили под кръста и са ми набили невалидни за апликейшъна данни.
Проблем!!! Голям проблем е това UTF-8!!! Толкова голям че ми изяжда 50% от времето за програмиране за да правя нещо в UTF-8 и да не се счупи кодировката!!! Само си представете среден или начинаеш хАмерикански програмист как програмира? Сяда на компютъра, няма да превключва на ден около 300 до 400 пъти клавиатурни подредби, няма да прави около 60-80 Backspace-а щото пише на "другия" език! След това няма да се занимава с кодировка на апликейщъна, на конекцията към базата данни и на самата база данни. Инсталирайте си LAMPP или WAMPP и да видите че веднага може правилно да пишете и обработвате "американски" език без никакви настройки. Абе на тях и BIG Mac-а им е биг...
Аййй сега да се преземим където сме, еле майко като почнат едни настройки, едно многобитово представяне на символи. То да беше само това ами ASCII символите в UTF-8 се представя еднобитово а кирилицата, китаицата са многобитови. Дето има един лаф:
- Като чуя за многоезикова поддръжка и се хващам за кубура...
То няма свършване!!!Хайде докато си оправите кодировките на различните взаимодействащи си софтуери не е кой знае какво. Но пак може да се забозите така яко че псувате като офчар, виждал съм женски които така псуват че не им излиза кирилицата че вий бедна фантазията за красноречието, то са майки, лели, бащи, чичовци и други, и то на български руски английски, и то мешано... Едно - имате MySQL или PosgreSQL, първо настройвате сървъра на UTF-8 а втората стъпка е когато правите базата и таблиците отново да са UTF-8!!! Трето и четвърто - настройвате PHP парсера на UTF-8 обаче не забравяйте да му кажете (това е четвъртото) транзакциите/конекциите към бабата данни да е UTF-8 щото много бързо у вас ще избуи каруцарксото в рода ви!!! Индианеца го настройвате на също на UTF-8. Опааа, не сме свършили, продължаваме!!! Казваме че HTML-а ни е UTF-8 . Ама това не е още края, трябва да си запишете файловете в UTF-8 без BOM. До тука привършваме с настройката на UTF-8 на уеб апликейшън, но пак може да сгомнясате всичко при FTP трансфера защото има text и binary mode трансфер. Абе програмист не се става от днес за утре!!!
Огнено-гневното ми изблогване е провокирано от възможността/невъзможността да реализирам едно действие под UTF-8 което под ASCII е елементарно!!! Защо е елементарно, 128 символа от ASCII на Американицата да ги обработвате с текущите около 400 до 600 функции за меляне на стрингове в PHP 5.2. От тях 20 до 30 функции са UTF-8 безпроблемни, останалите ще ви се изсерат като връбче на главата - без да се замислят.
Функция която изряpва стринг до определена дължина без да реже последната дума UTF-8 безопасна!!!
Функцията е реализирана на PHP 5.2 докато чакаме Ю-Те-еФ-ната версия 6. Значи имам стринг (гръцки, кирилица) и трябва да го огранича до 180 символа без да режа последната дума която е най-близо до 180 символ. Намерих функция от http://ov-consult.com/?p=40 която не реже последната дума
function short_text($text,$length) // Изпращат се два параметъра към функцията, текста и максималната дължина
{
$maxTextLenght=$length;
$aspace=" ";
if(strlen($text) > $maxTextLenght )
{
$text = substr(trim($text),0,$maxTextLenght);
$text = substr($text,0,strlen($text)-strpos(strrev($text),$aspace));
$text = $text.'…'; // При наличие на текст по-дълъг зададен в $length, накрая ще се покаже това което сте декларирали тук
}
return $text;
}
Обаче ако подадете UTF-8 не работи!!!
Продължавам да търся и намирам на http://web-tourist.net/login/login/view.php?st=2473 в коментарите от 26th June, 15:02 на Plamenator следния код:
function excerpt( $feed, $length )
{
if (mb_strlen($feed, 'UTF-8')>$length)
{
$feed = mb_substr($feed, 0, $length, 'UTF-8' ) . '...';
return $feed;
}
}
Почвам да чета и да се опитвам да заместя обикновенните функции с mb_ такива. И почвам, в изходната функция имам:strlen - mb_strlen
substr - mb_substr
strrev - function utf8_strrev в коментарите на http://bg2.php.net/manual/en/function.strrev.php от дата 21-Dec-2006 06:38 на carmel.alex at gmail.com
strpos - mb_strpos - http://bg.php.net/mb_strpos
strlen - mb_strlen
substr - mb_substr
и ги заместваме упорито една след друга!!! Ето и самата function utf8_strrev:
function utf8_strrev($str, $reverse_numbers = true)
{
$pattern = $reverse_numbers ? '/./us' : '/(\d+)?./us';
preg_match_all($pattern, $str, $ar);
return join('',array_reverse($ar[0]));
}
И като ги заместих една след друга в най-горната функция получих следния грозен код който се надявам че би трябвало да работи
function short_text($text,$length)
{
$maxTextLenght=$length;
$aspace=" ";
if(mb_strlen($text, 'UTF-8') > $maxTextLenght )
{
$text = mb_substr($text, 0, $maxTextLenght, 'UTF-8');
preg_match_all('/./us', $text, $ar);
$text1 = join('',array_reverse($ar[0]));
$text = mb_substr($text, 0, mb_strlen($text, 'UTF-8')-mb_strpos($text1, $aspace, 0, 'UTF-8'), 'UTF-8');
$text = $text.'...';
}
return $text;
}
и я извиквам с:
$des = trim($row["des"]);
$des = str_replace("\t", " ", $des);
$des = str_replace("\n", " ", $des);
$des = str_replace("\r", " ", $des);
if (empty($des))
{
//echo "дескрипшъна е празен"; header ("Location: http://localhost:8101/"); echo "empty";
exit;
}
if (!preg_match("#^[\s\-_,’.!?)(0-9A-Za-zА-Яа-я]+$#u", $des)) // !preg_match( "#^[- _0-9a-zа-я]+$#i", !ereg("^[- _,.!0-9A-Za-zА-Яа-я]+$",
{
//echo $des;
//echo " грешка";
exit;
}
var_dump($des); // дъмповете ми са за тестване
$des = short_text($des, 180);
var_dump($des); // дъмповете ми са за тестване
print $des;
Фрилансер не може да го накарате да направи горното за 20 лева или 15$!!!
Function which cuts string to a certain length without cutting the last word - UTF-8 safe!!!
Function is implemented in PHP 5.2 while waiting for UTF-8 version 6 of PHP. So I have a string (Greek, Cyrillic, Chinese) and we have to limit to 180 characters, with no cut to the last word that is closest to 180 character. I found a function at http://ov-consult.com/?p=40 which not cut the last word
function short_text($text,$length) // Изпращат се два параметъра към функцията, текста и максималната дължина
{
$maxTextLenght=$length;
$aspace=" ";
if(strlen($text) > $maxTextLenght )
{
$text = substr(trim($text),0,$maxTextLenght);
$text = substr($text,0,strlen($text)-strpos(strrev($text),$aspace));
$text = $text.'…'; // При наличие на текст по-дълъг зададен в $length, накрая ще се покаже това което сте декларирали тук
}
return $text;
}
However, if you submit the UTF-8 string it does not work!Keep searching I found at http://web-tourist.net/login/login/view.php?st=2473 in comments from 26th June, 15:02 to Plamenator following code:
function excerpt( $feed, $length )
{
if (mb_strlen($feed, 'UTF-8')>$length)
{
$feed = mb_substr($feed, 0, $length, 'UTF-8' ) . '...';
return $feed;
}
}
I started to read and try to replace the ordinary functions with same but mb_ functions:strlen - mb_strlen
substr - mb_substr
strrev - function utf8_strrev in comments at http://bg2.php.net/manual/en/function.strrev.php from date 21-Dec-2006 06:38 of carmel.alex-at-gmail.com
strpos - mb_strpos - http://bg.php.net/mb_strpos
strlen - mb_strlen
substr - mb_substr
and replace them one after another hard! Here is the function itself utf8_strrev:
function utf8_strrev($str, $reverse_numbers = true)
{
$pattern = $reverse_numbers ? '/./us' : '/(\d+)?./us';
preg_match_all($pattern, $str, $ar);
return join('',array_reverse($ar[0]));
}
And I replace them one after another in the top function! After that I made ugly code that hopefully should work:
function short_text($text,$length)
{
$maxTextLenght=$length;
$aspace=" ";
if(mb_strlen($text, 'UTF-8') > $maxTextLenght )
{
$text = mb_substr($text, 0, $maxTextLenght, 'UTF-8');
preg_match_all('/./us', $text, $ar);
$text1 = join('',array_reverse($ar[0]));
$text = mb_substr($text, 0, mb_strlen($text, 'UTF-8')-mb_strpos($text1, $aspace, 0, 'UTF-8'), 'UTF-8');
$text = $text.'...';
}
return $text;
}
And call function short_text with following code:
$des = trim($row["des"]);
$des = str_replace("\t", " ", $des);
$des = str_replace("\n", " ", $des);
$des = str_replace("\r", " ", $des);
if (empty($des))
{
//echo "description is empty"; header ("Location: http://localhost:8101/"); echo "empty";
exit;
}
if (!preg_match("#^[\s\-_,’.!?)(0-9A-Za-zА-Яа-я]+$#u", $des)) // !preg_match( "#^[- _0-9a-zа-я]+$#i", !ereg("^[- _,.!0-9A-Za-zА-Яа-я]+$",
{
//echo $des;
//echo " error";
exit;
}
var_dump($des); // dump for test, you MUST remove it!
$des = short_text($des, 180);
var_dump($des); // dump for test, you MUST remove it!
print $des;
Frilanser can not make this above for 20 Euro or $ 15!
Дневник / Blog: http://www.karatebulgaria.com/alex
За коментари / For comments: http://www.karatebulgaria.com/alex/addcomment.php/2009-06-15#add[ Добави коментар ]
Comments, texts and pictures not signed by me are property of their respective owners.
(c) 2003-2005 by Georgi Chorbadzhiyski. Some rights reserved.
Страницата е генерирана от Glog v3.50