2009-06-09 28 views
2

我想更改php中的字符串从全部大写到正常情况。这样每一句话都会以大写字母开头,其余的则以小写字母开头。从所有大写更改为正常情况下的输入

有没有简单的方法来做到这一点?

+0

怎么样缩写词和专有名词像地名?他们是否也应改为小写? – 2009-06-09 15:02:22

回答

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=". "; 
} 
+0

我需要更快地输入我的答案:) – 2009-06-09 15:04:09

2

我不知道任何方法,将自动做到这一点。你可能不得不写一些自己的规则,这些规则需要像字母'i'这样的特殊情况在需要时自行处理。你还会错过利用人和地名等东西的能力。

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 
1

如果字符串包含只有1句话,那么你可以使用:

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

这里有一个功能,将做到这一点:

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

0

要记住的一点:不要将其应用于所有输入字段!如果你把“迈克DF王”到“迈克Df的王”

人们在他们的名字全部大写首字母可以得到强大的恼火

欢呼:)

相关问题