将所有大写的输入更改为正常情况

时间:2009-06-09 14:59:38

标签: php

我想将php中的字符串从所有大写更改为正常情况。因此,每个句子都以大写字母开头,其余句子都是小写字母。

有一种简单的方法吗?

6 个答案:

答案 0 :(得分:10)

一种简单的方法是使用strtolower将字符串设置为小写,将ucfirst设置为大写第一个字符串,如下所示:

$str=ucfirst(strtolower($str));

如果字符串包含多个句子,则必须编写自己的算法,例如:在句子分隔符上爆炸并依次处理每个句子。除了第一个字符,您可能需要一些启发式方法来处理“I”之类的单词以及出现在文本中的任何常用专有名词。例如,像这样:

$sentences=explode('.', strtolower($str));
$str="";
$sep="";
foreach ($sentences as $sentence)
{
   //upper case first char
   $sentence=ucfirst(trim($sentence));

   //now we do more heuristics, like turn i and i'm into I and I'm
   $sentence=preg_replace('/i([\s\'])/', 'I$1', $sentence);

   //append sentence to output
   $str=$sep.$str;
   $sep=". ";
}

答案 1 :(得分:3)

这是一个可以做到的功能:

function sentence_case($s) {
   $str = strtolower($s);
   $cap = true;
   for($x = 0; $x < strlen($str); $x++){
       $letter = substr($str, $x, 1);
       if($letter == "." || $letter == "!" || $letter == "?"){
           $cap = true;
       }elseif($letter != " " && $cap == true){
           $letter = strtoupper($letter);
           $cap = false;
       }
       $ret .= $letter;
   }
   return $ret;
}

来源:

http://codesnippets.joyent.com/posts/show/715

答案 2 :(得分:2)

我不知道任何会自动执行此操作的方法。您可能需要编写自己的规则,这些规则可以采用特殊情况,例如字母'i',当它独立时需要大写。你仍然会错过将人和地名等资本化的能力。

答案 3 :(得分:1)

完全可能

$s = "THIS IS THE LINE I'M GOING TO WORK ON";

$s = ucfirst(strtolower($s));

echo $s; //This is the line I'm going to work on

答案 4 :(得分:1)

如果字符串只包含1个句子,那么您可以使用:

$string =  ucfirst(strtolower($string));

答案 5 :(得分:0)

要记住:不要将其应用于所有输入字段!

如果你将“Mike DF King”变成“Mike Df King”,那些名字中包含ALL CAPS首字母的人会变得非常烦恼

欢呼:)