Как сделать первые 2 символа строки заглавными? - PullRequest
11 голосов
/ 10 августа 2011

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

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

Ответы [ 7 ]

18 голосов
/ 10 августа 2011
$txt = strtoupper( substr( $txt, 0, 2 ) ).substr( $txt, 2 );

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

4 голосов
/ 10 августа 2011
$string = "hello";
$string{0} = strtoupper($string{0});
$string{1} = strtoupper($string{1});

var_dump($string);

//output: string(5) "HEllo"
4 голосов
/ 10 августа 2011
$str = substr_replace($str, strtoupper($str[0].$str[1]), 1, 2);
4 голосов
/ 10 августа 2011

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

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

По сути, извлеките первые два символа и поставьте их в верхнем регистре, затем присоедините оставшиеся символы.

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

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

3 голосов
/ 10 августа 2011

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

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

РЕДАКТИРОВАТЬ: Рекомендуется, чтобы вы не используйте этот подход.Из руководства по 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)
);
2 голосов
/ 10 августа 2011

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

2 голосов
/ 10 августа 2011

ucfirst Документы делает только первый, но доступ к базе данных для строк также работает:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...