Kicsiből nagy, nagyból pedig kicsi
Talán már veled is előfordult, hogy arra volt szükséged a munkád során, hogy egy szöveg első betűjének méretét megváltoztasd, vagy akár a teljes szövegét. Most erről fogok bemutatni egy kisebb kódrészletet és a felmerülő kellemetlenségeket, amit a szép magyar nyelvűnk okozhat számunkra ilyenkor.
Kapitális teljes szöveg esetén
Egy tetszőleges hosszú és összetételű szöveg betűinek nagybetűssé, vagy épp kisbetűssé alakítása viszonylag egyszerű feladat. Ehhez mindössze a "strtoupper", vagy "strtolower" függvényeket kell használjuk.
PHP
<?php
$text = "Szöveg";
echo strtolower($text); // szöveg
echo strtoupper($text); // SZöVEG
?>
A példából látszik, hogy a nagybetűssé alakítás során fellépett egy kis kellemetlenség. Az "ö" betűt nem tudta nagybetűssé alakítani a függvény. Ennek az az egyetlen oka, hogy a függvény alap esetben nem ismeri fel az összes utf8 karaktert. Természetesen erre is van megoldás az alábbi kódrészlet képében.
<?php
$text = "Szöveg";
echo mb_strtolower($text, 'UTF-8'); // szöveg
echo mb_strtoupper($text, 'UTF-8'); // SZÖVEG
?>
Csak az első betű számít
Vannak persze olyan speciális körülmények is, ahol kizárólag csak a szöveg első betűjét szeretnénk megváltoztatni. Erre szolgálnak a "lcfirst" és "ucfirst" függvények.
<?php
$text = "SZÖVEG";
echo lcfirst($text); // sZÖVEG;
$text = "szöveg";
echo ucfirst($text); // Szöveg
$text = "ékezettel kezdődik";
echo ucfirst($text); // ékezettel kezdődik
?>
A probléma itt is ugyan az. A függvény alap esettben nem kezeli megfelelően az utf8 karaktereket. A megoldás ebben az esetben viszont már egy kicsit összetettebb. A megoldáshoz kombinálnunk kell az előző példa tapasztalatait is és a célnak megfelelő saját függvényt kell írjunk.
<?php
if (!function_exists('mb_lcfirst'))
{
function mb_lcfirst($string, $encoding)
{
$strlen = mb_strlen($string, $encoding);
$first_char = mb_substr($string, 0, 1, $encoding);
$then = mb_substr($string, 1, $strlen - 1, $encoding);
return mb_strtolower($first_char, $encoding).$then;
}
}
if (!function_exists('mb_ucfirst'))
{
function mb_ucfirst($string, $encoding)
{
$strlen = mb_strlen($string, $encoding);
$first_char = mb_substr($string, 0, 1, $encoding);
$then = mb_substr($string, 1, $strlen - 1, $encoding);
return mb_strtoupper($first_char, $encoding).$then;
}
}
$text = "Ékezettel kezdődik";
echo mb_lcfirst($text, 'UTF-8'); // ékezettel kezdődik
$text = "ékezettel kezdődik";
echo mb_ucfirst($text, 'UTF-8'); // Ékezettel kezdődik
?>
A mondat minden szava
Ha már eddig eljutottunk butaság lenne kifelejteni azt a speciális esetet, amikor arra van igényünk, hogy egy mondat minden szavának első betűjét manipuláljuk. Erre is van függvény, méghozzá az "ucwords". A "lcwords" párja ellenben nem létezik, gy, ha ilyen célra szeretnénk megoldást találni, ahhoz saját függvényt kell írjunk.
<?php
if (!function_exists('lcwords'))
{
function lcwords($string)
{
$temp_array = array();
$word_array = explode(' ', $string);
foreach ($word_array as $word)
{
$temp_array[] = lcfirst($word);
}
return implode(' ', $temp_array);
}
}
$text = "EGY TETSZŐLEGES MONDAT, AMIBEN VAN MÉG EGY kISBETŰS SZÓ IS.";
echo lcwords($text); // eGY tETSZŐLEGES mONDAT, aMIBEN vAN mÉG eGY kISBETŰS sZÓ iS.
$text = "Egy tetszőleges mondat, amiben van még egy Nagybetűs szó is.";
echo ucwords($text); // Egy Tetszőleges Mondat, Amiben Van Még Egy Nagybetűs Szó is.
$text = "ékezettel kezdődik";
echo ucwords($text); // ékezettel Kezdődik
?>
Természetesen az eddig megszokott utf8 probléma itt is megjelenik, de semmi baj, hiszen erre is van kézenfekvő megoldás.
<?php
if (!function_exists('mb_ucwords'))
{
function mb_ucwords($string, $encoding)
{
return mb_convert_case($string, MB_CASE_TITLE, $encoding);
}
}
if (!function_exists('mb_lcfirst'))
{
function mb_lcfirst($string, $encoding)
{
$strlen = mb_strlen($string, $encoding);
$first_char = mb_substr($string, 0, 1, $encoding);
$then = mb_substr($string, 1, $strlen - 1, $encoding);
return mb_strtolower($first_char, $encoding).$then;
}
}
if (!function_exists('mb_lcwords'))
{
function mb_lcwords($string, $encoding)
{
$temp_array = array();
$word_array = explode(' ', $string);
foreach ($word_array as $word)
{
$temp_array[] = mb_lcfirst($word, $encoding);
}
return implode(' ', $temp_array);
}
}
$text = "EGY TETSZŐLEGES MONDAT, AMIBEN VAN MÉG EGY kISBETŰS ÉKEZETES SZÓ IS.";
echo mb_lcwords($text, 'UTF-8'); // eGY tETSZŐLEGES mONDAT, aMIBEN vAN mÉG eGY kISBETŰS éKEZETES sZÓ iS.
$text = "Egy tetszőleges mondat, amiben van még egy Nagybetűs ékezetes szó is.";
echo mb_ucwords($text, 'UTF-8'); // Egy Tetszőleges Mondat, Amiben Van Még Egy Nagybetűs Ékezetes Szó is.
?>
Leírásaink azon kezdő és haladó programozóknak nyújtanak segítséget, akik már minimális szinten foglalkoztak weboldalkészítéssel. Ha szeretnél jobban elmélyülni a témában, vagy elsajátítani alapokat, még tovább fejlődni, akkor nézz körbe tanfolyam kínálatunkban, ahol a kezdőtől a profi szintig nyújtunk képzéseket a számodra.