Как сделать первые 2 символа строки в верхнем регистре?

Как я могу использовать функцию PHP strtoupper для первых двух символов строки? Или есть еще одна функция для этого?

Итак, строка 'hello' или 'Hello' должна быть преобразована в 'HEllo'.

Ответ 1

$txt = strtoupper( substr( $txt, 0, 2 ) ).substr( $txt, 2 );

Это работает также для строк длиной менее 2 символов.

Ответ 2

Предполагая, что вам нужно всего лишь одно слово:

$ucfirsttwo = strtoupper(substr($word, 0, 2)) . substr($word, 2);

В принципе, извлеките первые два символа и запишите в верхний регистр, затем добавьте остальные символы.

Если вам нужно обрабатывать несколько слов в строке, это становится немного уродливым.

О, и если вы используете многобайтные символы, префикс двух функций с mb_, чтобы получить версию с поддержкой нескольких байтов.

Ответ 3

$str = substr_replace($str, strtoupper($str[0].$str[1]), 1, 2);

Ответ 4

$string = "hello";
$string{0} = strtoupper($string{0});
$string{1} = strtoupper($string{1});

var_dump($string);

//output: string(5) "HEllo"

Ответ 5

Используя preg_replace() с e модификатором шаблона может быть интересным здесь:

$str = 'HELLO';
echo preg_replace('/^(\w{1,2})/e', 'strtoupper(\\1)', strtolower($str));

EDIT: рекомендуется использовать этот не. Из руководства PHP:

Использование этого модификатора не рекомендуется, так как оно может легко ввести уязвимости безопасности:

<?php
$html = $_POST['html'];

// uppercase headings
$html = preg_replace(
    '(<h([1-6])>(.*?)</h\1>)e',
    '"<h$1>" . strtoupper("$2") . "</h$1>"',
    $html
);

Вышеприведенный примерный код можно легко использовать, передав строку например <h1>{${eval($_GET[php_code])}}</h1>. Это дает атакующему способность выполнять произвольный PHP-код и, как таковой, дает ему почти полный доступ к вашему серверу.

Чтобы предотвратить такую ​​уязвимость удаленного выполнения кода, Вместо этого следует использовать функцию preg_replace_callback():

<?php
$html = $_POST['html'];

// uppercase headings
$html = preg_replace_callback(
    '(<h([1-6])>(.*?)</h\1>)',
    function ($m) {
        return "<h$m[1]>" . strtoupper($m[2]) . "</h$m[1]>";
    },
    $html
);

Как рекомендовано, вместо использования шаблона e рассмотрите возможность использования preg_replace_callback():

$str = 'HELLO';
echo preg_replace_callback(
    '/^(\w{1,2})/'
  , function( $m )
    {
      return strtoupper($m[1]);
    }
  , strtolower($str)
);

Ответ 6

ucfirst Документы выполняет только первый, но substr access on strings также работает:

$str = ucfirst($str);
$str[1] = strtoupper($str[1]);

Примечание. Это работает, но вы получите уведомления о меньших строках, если смещение 1 не определено, поэтому небезопасные пустые строки даже будут преобразованы в массив. Поэтому просто показать некоторые варианты.

Ответ 7

Это должно работать strtoupper(substr($target, 0, 2)) . substr($target, 2), где $target - это ваше "привет" или что-то еще.