我想将php中的字符串从所有大写更改为正常情况。因此,每个句子都以大写字母开头,其余句子都是小写字母。
有一种简单的方法吗?
答案 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;
}
来源:
答案 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首字母的人会变得非常烦恼
欢呼:)