PHP.mk документација

mb_convert_case

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.mb-convert-case.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.mb-convert-case.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
mb_convert_case

Референца за `function.mb-convert-case.php` со подобрена типографија и навигација.

function.mb-convert-case.php

mb_convert_case

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

mb_convert_case(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

= NULL

mb_convert_case(string $string, int $mode, ?string $encoding = null): string

Изврши превиткување на случајот на стринг stringИзвршува превиткување на случајот на mode.

Параметри

string

На string што се конвертира.

mode

, претворено на начин како што е специфицирано од MB_CASE_UPPER, MB_CASE_LOWER, MB_CASE_TITLE, MB_CASE_FOLD, MB_CASE_UPPER_SIMPLE, MB_CASE_LOWER_SIMPLE, MB_CASE_TITLE_SIMPLE, MB_CASE_FOLD_SIMPLE.

encoding

На encoding параметарот е кодирањето на карактерите. Ако е изоставен или null, ќе се користи внатрешната вредност за кодирање на карактерите.

Вратени вредности

Режимот на конверзија. Тоа може да биде еден од string Превиткана верзија на случајот од mode.

Дневник на промени

Верзија = NULL
8.3.0 претворено на начин како што е специфицирано од MB_CASE_LOWER and MB_CASE_TITLE Имплементирани условни правила за случај за грчката буква сигма кои се применуваат само на MB_CASE_LOWER_SIMPLE and MB_CASE_TITLE_SIMPLE.
7.3.0 Додадена е поддршка за MB_CASE_FOLD, MB_CASE_UPPER_SIMPLE, MB_CASE_LOWER_SIMPLE, MB_CASE_TITLE_SIMPLEПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во MB_CASE_FOLD_SIMPLE as mode.

Примери

Пример #1 mb_convert_case() example

<?php
$str
= "mary had a Little lamb and she loved it so";
$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
echo
$str, PHP_EOL;
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
echo
$str, PHP_EOL;
?>

Пример #2 mb_convert_case() режими, а не на

<?php
$str
= "Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός";
$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
echo
$str, PHP_EOL;
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
echo
$str, PHP_EOL;
?>

Белешки

Враќа резултантниот стринг. strtolower() and strtoupper()За разлика од стандардните функции за преклопување на случај како

, преклопувањето на случај се извршува врз основа на својствата на уникод карактерот. Така однесувањето на оваа функција не е под влијание на локалните поставки и може да претвори било кој карактер што има 'алфабетско' својство, како што е a-умлаут (ä). » http://www.unicode.org/reports/tr21/.

Види Исто така

  • mb_strtolower() - Направи стринг со мали букви
  • mb_strtoupper() - Направи стринг со големи букви
  • strtolower() - Направи стринг со мали букви
  • strtoupper() - Направи стринг со големи букви
  • ucfirst() - Изврши преклопување на случај на стринг
  • ucwords() - Го прави првиот знак од секој збор во низата со големи букви

Белешки од корисници 10 белешки

alNzy
пред 6 години
You can use this function to fix problems related to Turkish "ı", "I", "i", "İ" characters. This function also replaces the weird "i̇" character with regular "i" character ("i̇ => i").

function mb_convert_case_tr($str, $type, $encoding = "UTF-8")
{

  switch ($type) {
    case "u":
    case "upper":
    case MB_CASE_UPPER:
      $type = MB_CASE_UPPER;
      break;
    case "l":
    case "lower":
    case MB_CASE_LOWER:
      $type = MB_CASE_LOWER;
      break;
    case "t":
    case "title":
    case MB_CASE_TITLE:
      $type = MB_CASE_TITLE;
      break;
  }

  $str = str_replace("i", "İ", $str);
  $str = str_replace("I", "ı", $str);

  $str = mb_convert_case($str, $type, $encoding);
  $str = str_replace("i̇", "i", $str);

  return $str;
}
пример со не-латински UTF-8 текст
пред 16 години
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.

<?php

function titleCase($string, $delimiters = array(" ", "-", ".", "'", "O'", "Mc"), $exceptions = array("út", "u", "s", "és", "utca", "tér", "krt", "körút", "sétány", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX", "XXI", "XXII", "XXIII", "XXIV", "XXV", "XXVI", "XXVII", "XXVIII", "XXIX", "XXX" )) {
       /*
        * Exceptions in lower case are words you don't want converted
        * Exceptions all in upper case are any words you don't want converted to title case
        *   but should be converted to upper case, e.g.:
        *   king henry viii or king henry Viii should be King Henry VIII
        */
        $string = mb_convert_case($string, MB_CASE_TITLE, "UTF-8");

       foreach ($delimiters as $dlnr => $delimiter){
               $words = explode($delimiter, $string);
               $newwords = array();
               foreach ($words as $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);
       }//foreach
       return $string;
} 

?>
agash at freemail dot hu
20 години пред
For CZECH characters:
<?php
$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.
Rasa Ravi at tantrajoga dot cz
пред 17 години
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);
}
info at yasarnet dot com
пред 16 години
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)!

<?php
function titleCase($string, $delimiters = array(" ", "-", "O'"), $exceptions = array("to", "a", "the", "of", "by", "and", "with", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X")) {
       /*
        * Exceptions in lower case are words you don't want converted
        * Exceptions all in upper case are any words you don't want converted to title case
        *   but should be converted to upper case, e.g.:
        *   king henry viii or king henry Viii should be King Henry VIII
        */
       foreach ($delimiters as $delimiter){
               $words = explode($delimiter, $string);
               $newwords = array();
               foreach ($words as $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;
}
?>
turabgarip на gmail точка com
пред 1 година
As with other string functions, there is a problem with Turkish "i" with this function. There is a bug report from 2015 about the issue but PHP team says "language-specific conditional special case mappings is not implemented", although actually it breaks the logic of the function and renders it non-usable for the purpose.

https://bugs.php.net/bug.php?id=70072

The problem arises from the letter "i" in Latin being a COMPLETELY different letter from "i" in Turkish. Turkish "ı" becomes "I" for capital; while Latin "I" capital is actually capital for "i" and not "ı".

PHP takes this into consideration in some cases and ignores it in other cases; which causes an unpredictable behavior. When the letters in question is in the middle or at the beginning of a word, when some of multibyte chars are next to standard Latin chars or another multibyte character etc. These all behave differently, which is simply wrong.

There are some user notes trying to cover this but not very efficiently. Because some of them doesn't cover word boundaries and some produce non-standard characters. Here is what I tested and have been using for quite a time:

<?php

function mb_convert_case_i(string $string, int $mode = MB_CASE_TITLE, string $encoding = 'UTF-8'): string {
    // Turkish "i" is a special case
    $string = match($mode) {
        MB_CASE_UPPER, MB_CASE_UPPER_SIMPLE => str_replace(['i', 'ı'], ['İ', 'I'], $string),
        MB_CASE_LOWER, MB_CASE_LOWER_SIMPLE => str_replace(['İ', 'I'], ['i', 'ı'], $string),
        // PHP behaves differently when i and ı are at the beginning of the word
        MB_CASE_TITLE, MB_CASE_TITLE_SIMPLE => preg_replace(['/İ/u', '/I/u', '/\b(i)/u'], ['i', 'ı', 'İ'], $string),
        default => $string,
    };
    return mb_convert_case($string, $mode, $encoding);
}

?>

As you have noticed, it uses match syntax which requires PHP 8. For lower versions, you can replace it with switch properly. I haven't tested it for case folding. If you need it, just add another condition to the match.
the at psychoticneurotic dot com
пред 8 години
for turkish simple:

$str = mb_convert_case(str_replace(['i','I'], ['İ','ı'], $str), MB_CASE_TITLE,"UTF-8");
tavhane at gmail dot com
пред 9 години
MB_CASE_TITLE doesn't change letters in quotation marks.

Example:
mb_convert_case('AAA "aaa"', MB_CASE_TITLE); 
// Result: Aaa "aaa"
Анонимен
пред 4 години
$str = "Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός";
$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
this convertation does not give the example that you already post 
but this one

$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
"ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ, ΔΡΑΣΚΕΛΊΖΕΙ ΥΠΈΡ ΝΩΘΡΟΎ ΚΥΝΌΣ"
dave at wp dot pl
пред 8 години
for turkish language I => i  and i => I conversion is a problem. It must be I => ı and i => İ so my simple solution is

    public function title_case_turkish($str){

 
        $str = str_replace("i", "İ", $str);
        $str = str_replace("I", "ı", $str);

        $str = mb_convert_case($str, MB_CASE_TITLE,"UTF-8");

        return $str;

    }
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.