【问题标题】:How to convert to sentence case each new line?如何将每个新行转换为句子大小写?
【发布时间】:2013-06-04 16:10:05
【问题描述】:

我正在开发一个歌词网站。管理面板中有一个textarea 可以插入一首新歌。我该怎么做?

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

我试过ucfirst(strtolower($str)),它只大写整个单词集的第一个字母,因为其中有句号。我知道如何删除不必要的连字符、多余的空格和 html 标记(如果有)。我该怎么办?使用nl2br 并用\n 替换<br/> 可以做所有事情,但要使每一个新行都大写。


编辑:

<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

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

Sithsoi asdigoisad
aASDF asdgdguh asudhg
sadg asdg AAFA ASFA

想要的输出:

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

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

【问题讨论】:

    标签: php string text transform capitalize


    【解决方案1】:

    你可以这样做:

    <?php
    $text = "your lyrics";
    $lines = explode("\n", $text);
    $goodLines = array();
    
    foreach($lines as $line)
    {
        array_push($goodLines, ucfirst(strtolower($line)) . " ");
    }
    
    $goodText = implode("\n", $goodLines);
    ?>
    

    【讨论】:

    • 它必须是"\n"PHP_EOL,而不是'\n'。反斜杠仅在单引号内转义 '
    • @AlexanderCogneau。谢谢但仍然没有运气。请查看编辑
    • @Sid 如果按照我建议的方式进行操作,输出会是什么?
    • @AlexanderCogneau 更改$line 不会影响$lines 数组,因此implode 将只返回原始文本。您可能需要创建一个新数组,将每个新的$line 附加到它,然后将implode 附加到它。或者,按索引迭代$lines,并就地替换行。
    • @AlexanderCogneau 理论上。在 PHP 5.3+ 中,您可以单行执行:$goodText = implode("\n", array_map(function($line) { return ucfirst(strtolower($line)) . " "; }, explode("\n", $text)));
    【解决方案2】:

    用 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);
    }
    ?>
    

    这是一个证明它有效的phpfile:

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

    【讨论】:

    • 谢谢。这项工作除了每行末尾没有空格外。 :(
    • 好吧,现在空格被添加为新行,而不是在每一行的末尾。
    • Err.... 我正在使用 $_POST 数据。 NOT 只是一个文本字符串。请查看我的代码的$text
    • 好吧,在开头又添加了空格。不是在最后。我怎样才能把它移到每个句子的末尾?
    • 我不确定我是否理解您想要的内容,您希望每个句子都以空格和换行符结尾?
    猜你喜欢
    • 2011-10-29
    • 2021-08-14
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多