【问题标题】:PHP Ucwords with or and special characters带有或和特殊字符的 PHP Ucwords
【发布时间】:2016-11-26 13:08:09
【问题描述】:

这就是我正在做的事情。

我有几个大写的字符串

†你好
白天或黑夜

所以要转换它们,我使用以下代码:

ucwords(strtolower($string));

这是最终结果:

†你好
白天或黑夜

如何忽略 或任何特殊字符,以便单词可以显示

†你好

我怎样才能保持单词喜欢或全部小写。

【问题讨论】:

  • “特殊字符”是什么意思? “é”是特殊字符吗?
  • 好吧,我说的是像这样的任何特殊字符 †(在这种情况下)。
  • 那么†HELLO†THERE†HOW†ARE†YOU应该怎么输出呢?
  • 最有可能是†Hello†There†How†Are†You
  • @KevinDavis 运气好吗?

标签: php lowercase


【解决方案1】:

试试:

print preg_replace_callback('#([a-zA-ZÄÜÖäüö0-9]+)#',function($a){
   return ucfirst(strtolower($a[0]));
 },
 '†hello THERE'
);

[a-zA-ZÄÜÖäüö0-9]+找到一个只有这个字符的单词

你也可以用这个代替[\w]+ 见:http://www.regular-expressions.info/wordboundaries.html

preg_replace_callback对找到的结果调用函数

function($a){} 对结果做一些事情,这里是ucfirst(strtolower())

【讨论】:

    【解决方案2】:
        $lowerString = strtolower($string);
        $stringArray = explode($lowerString, ' ');
        foreach ($stringArray as $key => $singleString) {
            $i = 0; 
            $formatedString = '';
            $upcased = false;
            for ($i; $i < strlen($singleString); $i++) {
                $ascNum = chr($singleString[$i]);
                $word = $singleString[$i];
                if (!$upcased) {
                  if (($ascNum >= 65 && $ascNum <= 90) || ($ascNum >= 97 && $ascNum <= 122) ) {
                    $word = ucwords($word);
                    $upcased = true;
                  }
                }
                $formatedString .= $word;  
            }
            $stringArray[$key] = $formatedString;
        }
        $result = implode(' ',$stringArray);
    

    可能有点复杂,但思路清晰。

    【讨论】:

      【解决方案3】:

      ucwords(strtolower("†HELLO THERE"),"† "); ucwords 的第二个参数是optional delimiter。因此,通过同时包含 dagger 和空格,ucwords 将适用于提供的示例。

      关于您的第二个问题,请参阅here

      【讨论】:

        【解决方案4】:

        假设单词用空格隔开:

        <?php
        function custom_ucfirst($s)
        {
            $s = strtolower($s);
        
            $e = (strpos($s, ' ') !== false ? explode(' ', $s) : array($s));
        
            $keep_all_lowercase = array('or','and','but');
        
            foreach($e as $k=>$v)
            {
                if(!in_array($v, $keep_all_lowercase))
                {
                    $str_split = str_split($v);
        
                    foreach($str_split as $k2=>$v2)
                    {
                        if(in_array($v2, range('a','z')))
                        {
                            $str_split[$k2] = strtoupper($v2);
                            break;
                        }
                    }
        
                    $e[$k] = implode('', $str_split);
                }
            }
        
            return implode(' ', $e);
        }
        
        echo custom_ucfirst('†HELLO THERE .cloud. or sky what a nice an*d ()good day.');
        
        // †Hello There .Cloud. or Sky What A Nice An*d ()Good Day.
        

        【讨论】:

          猜你喜欢
          • 2020-09-13
          • 2014-10-28
          • 1970-01-01
          • 1970-01-01
          • 2012-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-15
          相关资源
          最近更新 更多