如何将每个新行转换为句子?

时间:2013-06-08 12:32:00

标签: php string text transform capitalize

我正在写一个歌词网站。管理面板中有一个textarea来插入一首新歌。我该怎么办?

  • 将每行的第一个字母大写
  • 在每行末尾添加空格

我尝试了ucfirst(strtolower($str)),它只对整个单词集的第一个字母进行大写,因为它有句号。我知道如何删除不必要的连字符,额外的空格和html标签(如果有的话)。我该怎么办?使用nl2br并将<br/>替换为\n可以完成所有操作,但会对每个新行进行大写。


修改

<style>
    textarea { width:200px; height:300px; }
</style>

<form action="/t" method="post">
    <textarea name="txt"><?php echo $_POST["txt"]; ?></textarea>
    <input type="submit" value="OK"/>
    <input type="reset" value="reset"/>
</form>

<?php
$text = $_POST["txt"];
$lines = explode("\n", $text);

foreach($lines as $line)
{
    $line = ucfirst(strtolower($line)) . " ";
}

$goodtext = implode("\n", $lines);

echo "<textarea>$goodtext</textarea>";

?>

编辑2

用户在textarea中输入的示例文本:

Sithsoi asdigoisad
aASDF asdgdguh asudhg
sadg asdg AAFA ASFA

所需的输出:

Sithsoi asdigoisad[sapce]
Aasdf asdgdguh asudhg[sapce]
Sadg asdg aafa asfa[sapce]

注意每行的大写首字母和每行末尾的[空格]

2 个答案:

答案 0 :(得分:2)

你可以这样做:

<?php
$text = "your lyrics";
$lines = explode("\n", $text);
$goodLines = array();

foreach($lines as $line)
{
    array_push($goodLines, ucfirst(strtolower($line)) . " ");
}

$goodText = implode("\n", $goodLines);
?>

答案 1 :(得分:1)

使用array_map()简化:

<?php
if(isset($_POST['txt'])) {
    $text = $_POST["txt"]; 
    $text = str_replace("\r\n", "\n", $text);
    $lines = explode("\n", $text); 
    $goodLines = array_map('ucfirst', array_map('strtolower', $lines)); 
    $goodText = implode(" \n", $goodLines); 
    echo nl2br($goodText);
}
?>

这是一个证明它可行的phpfidle:

http://phpfiddle.org/main/code/trr-dgu