81 Stimmen

ucfirst()-Funktion für Multibyte-Zeichenkodierungen

Ich habe mich erkundigt nach strtolower Funktion. Aber wenn ich ausländische Zeichen verwende, werden sie nicht in Großbuchstaben umgewandelt, so dass ich sie verwenden muss:

 mb_strtolower($a,"utf8");

Aber was kann ich tun, wenn ich die ucfirst() Funktion? Ich habe keine ähnliche Funktion gefunden, bei der ich den Kodierungstyp einstellen kann.

0 Stimmen

0 Stimmen

P.S. Es gibt ein Composer-Paket mit richtig implementiertem mbUcFirst() github.com/cofirazak/phpMissingFunctions

2voto

Jaroslav Štreit Punkte 426

Ich benutze cp1250 auf der Webseite, und für Ú funktioniert mb_ucfirst nicht, also wenig Upgrade:

  function mb_ucfirst($string)
{
    $main_encoding = "cp1250"; 
    $inner_encoding = "utf-8";
    $string = iconv($main_encoding, $inner_encoding , $string );
    $strlen = mb_strlen($string);
    $firstChar = mb_substr($string, 0, 1, $inner_encoding);
    $then = mb_substr($string, 1, $strlen - 1, $inner_encoding);
    return $string = iconv($inner_encoding, $main_encoding , mb_strtoupper($firstChar, $inner_encoding) . $then );
}

2 Stimmen

Für eine allgemeinere Verwendung sollte $main_encoding entweder als optionaler Parameter oder durch mb_internal_encoding() gesetzt werden. Ansonsten gut.

0voto

user3302248 Punkte 9
/*This worked correctly for me*/
function mb_ucfirst($string, $encoding='UTF-8')
{
    $firstChar = mb_substr($string, 0, 1, $encoding);
    $then = mb_substr($string, 1, mb_strlen($string, $encoding)-1, $encoding);
    return mb_strtoupper($firstChar, $encoding) . $then;
}

0 Stimmen

Diese Funktion erfordert PHP/5.4.8 oder höher. Außerdem müssen Sie wahrscheinlich ein gutes Gebietsschema einstellen und sicherstellen, dass mb_internal_encoding() gibt einen korrekten Wert zurück.

0 Stimmen

Dieser Hinweis wurde bereits früher gegeben. Diese Antwort, die nur den Code betrifft, ist überflüssig.

1 Stimmen

Standard sollte mb_internal_encoding() sein, nicht UTF-8 =/

-1voto

Paris Z Punkte 21
$string = trim(preg_replace('/\s+/', ' ', $string));
$string_ar = explode(' ', mb_strtolower($string,'utf-8'));

foreach($string_ar as $key => $value {
  $string_str .= mb_convert_case(mb_substr(trim($value), 0, 1), MB_CASE_TITLE, 'utf-8')
    . mb_substr(trim($value),1)
    . ' ';
}

$string = trim($string_str);

0 Stimmen

Bitte erläutern Sie Ihre Antwort ausführlicher

2 Stimmen

Wird jedes erste Wort nach Leerzeichen in Großbuchstaben geschrieben, und dann wird das Ergebnis abgeschnitten, das ist NICHT das, was ucfirst() tut. -1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X