php case action,mb_convert_case

用户评论:

[#1]

cataphract at php dot net [2010-07-26 11:06:15]

This is a variation of mb_convert_case that works only for UTF-8 strings and that will not convert to lowercase anything.

This avoids turning "AAA aaa" into "Aaa Aaa"; it maps "AAA aaa" into ""AAA Aaa" instead.

foreach ($arras$char) {$res=preg_match('/\\p{Mn}|\\p{Me}|\\p{Cf}|\\p{Lm}|\\p{Sk}|\\p{Lu}|\\p{Ll}|'.'\\p{Lt}|\\p{Sk}|\\p{Cs}/u',$char) ==1;

if ($mode) {

if (!$res)$mode=false;

}

elseif ($res) {$mode=true;$char=mb_convert_case($char,MB_CASE_TITLE,"UTF-8");

}$result.=$char;

}

return$result;

}?>

[#2]

agash at freemail dot hu [2009-07-19 03:27:41]

as the previouly posted version of this function doesn't handle UTF-8 characters, I simply tried to replace ucfirst to mb_convert_case, but then any previous case foldings were lost while looping through delimiters.

So I decided to do an mb_convert_case on the input string (it also deals with words is uppercase wich may also be problematic when doing case-sensitive search), and do the rest of checking after that.

As with mb_convert_case, words are capitalized, I also added lowercase convertion for the exceptions, but, for the above mentioned reason, I left ucfirst unchanged.

Now it works fine for utf-8 strings as well, except for string delimiters followed by an UTF-8 character ("Mc??d??m" is unchanged, while "mcdunno's" is converted to "McDunno's" and "?kr?s-T?TH ??DUa" in also put in the correct form)

I use it for checking user input on names and addresses, so exceptions list contains some hungarian words too.

foreach ($delimitersas$dlnr=>$delimiter){$words=explode($delimiter,$string);$newwords= array();

foreach ($wordsas$wordnr=>$word){

if (in_array(mb_strtoupper($word,"UTF-8"),$exceptions)){// check exceptions list for any words that should be in upper case$word=mb_strtoupper($word,"UTF-8");

}

elseif (in_array(mb_strtolower($word,"UTF-8"),$exceptions)){// check exceptions list for any words that should be in upper case$word=mb_strtolower($word,"UTF-8");

}

elseif (!in_array($word,$exceptions) ){// convert to uppercase (non-utf8 only)$word=ucfirst($word);

}array_push($newwords,$word);

}$string=join($delimiter,$newwords);

}//foreachreturn$string;

}?>

[#3]

the at psychoticneurotic dot com [2009-04-08 10:03:40]

Building upon Justin's and Alex's work...

This function allows you to specify which delimiter(s) to explode on (not just the default space). Now you can correctly capitalize Irish names and hyphenated words (if you want)!

foreach ($wordsas$word){

if (in_array(strtoupper($word),$exceptions)){// check exceptions list for any words that should be in upper case$word=strtoupper($word);

} elseif (!in_array($word,$exceptions)){// convert to uppercase$word=ucfirst($word);

}array_push($newwords,$word);

}$string=join($delimiter,$newwords);

}

return$string;

}?>

[#4]

Justin [2008-12-17 08:42:55]

Retouching Alex's example so it works:

function titleCase($string, $exceptions = array('to', 'a', 'the', 'of', 'by', 'and', 'with', 'UI', 'V','X')) {

$words = explode(" ", $string);

$newwords = array();

foreach ($words as $word)

{

if (!in_array($word, $exceptions)) {

$word = strtolower($word);

$word = ucfirst($word);

}

array_push($newwords, $word);

}

return join(" ", $newwords);

}

It doesn't work for Irish names, etc. So keep that in mind.

[#5]

info at yasarnet dot com [2008-07-03 23:57:00]

For my case following did the work to capitalize UTF-8 encoded string.

function capitalize($str, $encoding = 'UTF-8') {

return mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding) . mb_strtolower(mb_substr($str, 1, mb_strlen($str), $encoding), $encoding);

}

[#6]

alex at agileware dot net [2006-02-06 18:02:16]

This function is a bit more flexible than using mb_convert_case with MB_CASE_TITLE, because it lets you add words whose case you don't want modified.

function title_case($string, $exceptions = array('to', 'a', 'the', 'of', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X')) {

$words = split(" ", $string);

$newwords = array();

foreach ($words as $word)

{

if (!array_key_exists($word, $exceptions)) {

$word = strtolower($word);

$word = ucfirst($word);

}

array_push($newwords, $word);

}

return ucfirst(join(" ", $newwords));

}

[#7]

Rasa Ravi at tantrajoga dot cz [2005-04-30 01:36:54]

For CZECH characters:

$text=mb_convert_case($text,MB_CASE_LOWER,"Windows-1251");?>

The right encoding Windows-1250 is not valid (see the list mb_list_encodings), but Windows-1251 will do the same 100%. The function strtolower() ignores czech characters with diacritics.

你可能感兴趣的:(php,case,action)