如何使字符串大写的前2个字符?

时间:2011-08-10 15:44:15

标签: php string

如何在字符串的前两个字符中使用PHP strtoupper函数?或者还有其他功能吗?

因此字符串'hello'或'Hello'必须转换为'HEllo'。

7 个答案:

答案 0 :(得分:18)

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

这适用于长度小于2个字符的字符串。

答案 1 :(得分:4)

假设你只需要一个单词:

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

基本上,提取前两个字符并大写,然后附加剩余的字符。

如果您需要处理字符串中的多个单词,那么它会变得有点丑陋。

哦,如果您使用的是多字节字符,请在两个函数前加上mb_,以获得支持多字节的版本。

答案 2 :(得分:4)

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

答案 3 :(得分:4)

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

var_dump($string);

//output: string(5) "HEllo"

答案 4 :(得分:3)

preg_replace()e pattern modifier一起使用可能很有趣:

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

编辑:建议您使用此方法。来自PHP manual

  

不鼓励使用此修饰符,因为它很容易引入安全漏洞:

<?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)
);

答案 5 :(得分:2)

ucfirstDocs只做第一个,但substr access on strings也有效:

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

备注:这样可行,但如果未定义偏移量1,您将收到较小字符串的注意事项,因此不安全,空字符串甚至会转换为数组。所以它只是展示了一些选择。

答案 6 :(得分:2)

这应该有效strtoupper(substr($target, 0, 2)) . substr($target, 2),其中$ target是你的'你好'或其他什么。