Kicsiből nagy, nagyból pedig kicsi

Kicsiből nagy, nagyból pedig kicsi

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

Demo letöltése

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.

Oszd meg barátaiddal is!

Facebook Twitter Linkedin

Elérhetőségeink

  • Címünk: 1139 Budapest, Frangepán utca 3. (1. emelet)

  • Ügyfélfogadás, beiratkozás: Hétfőtől - péntekig: 08:00-15:00

  • Telefonszámunk: 06 70 604 2060, vagy 06 1 4500 110

  • E-mail címünk:

Közösségünk