Как я могу использовать функцию PHP strtoupper для первых двух символов строки? Или есть еще одна функция для этого?
Итак, строка 'hello' или 'Hello' должна быть преобразована в 'HEllo'.
Как я могу использовать функцию PHP strtoupper для первых двух символов строки? Или есть еще одна функция для этого?
Итак, строка 'hello' или 'Hello' должна быть преобразована в 'HEllo'.
$txt = strtoupper( substr( $txt, 0, 2 ) ).substr( $txt, 2 );
Это работает также для строк длиной менее 2 символов.
Предполагая, что вам нужно всего лишь одно слово:
$ucfirsttwo = strtoupper(substr($word, 0, 2)) . substr($word, 2);
В принципе, извлеките первые два символа и запишите в верхний регистр, затем добавьте остальные символы.
Если вам нужно обрабатывать несколько слов в строке, это становится немного уродливым.
О, и если вы используете многобайтные символы, префикс двух функций с mb_, чтобы получить версию с поддержкой нескольких байтов.
$str = substr_replace($str, strtoupper($str[0].$str[1]), 1, 2);
$string = "hello";
$string{0} = strtoupper($string{0});
$string{1} = strtoupper($string{1});
var_dump($string);
//output: string(5) "HEllo"
Используя 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)
);
ucfirst
Документы выполняет только первый, но substr access on strings также работает:
$str = ucfirst($str);
$str[1] = strtoupper($str[1]);
Примечание. Это работает, но вы получите уведомления о меньших строках, если смещение 1 не определено, поэтому небезопасные пустые строки даже будут преобразованы в массив. Поэтому просто показать некоторые варианты.
Это должно работать strtoupper(substr($target, 0, 2)) . substr($target, 2)
, где $target - это ваше "привет" или что-то еще.