将字符串转换为标题大小写 - PHP

时间:2017-06-25 16:17:32

标签: php function title-case

我使用此功能将文本转换为标题大小写:

function strtotitle($title) {

 $smallwordsarray = array( 'of','a','the','and','an','or','nor','but','is','if','then','else','when', 'at','from','by','on','off','for','in','to','into','with','it', 'as' );

  // Split the string into separate words
  $words = explode(' ', $title);

  foreach ($words as $key => $word) {

   // If this word is the first, or it's not one of our small words, capitalise it
   // with ucwords().
   if ($key == 0 or !in_array($word, $smallwordsarray))
    $words[$key] = ucwords($word);
   }

   // Join the words back into a string
   $newtitle = implode(' ', $words);

   return $newtitle;
}

问题在于,如果文本是粗体,斜体等,那么该函数不起作用,并且不会标题该单词。

例如:"这是一个简单的句子"将被转换为"这是一个简单的句子"。但是"这是一个简单的句子"将转换为"这是简单句子"。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

如果您正在讨论HTML标记并且想要保存它,则可以使用此实现:

<?php
  /* Your old string */
  $string = "<b>asd</b>";

  /* Remove html code */
  $old = strip_tags($string);
  /* Upper case the first letter */
  $new = ucfirst($old);

  /* Replace old word to new word in $string */
  $real = str_replace($old,$new,$string);

  /* Here the new string and the old string */
  echo $real." ".$string;
?>

所以代码中的解决方案如下:

function strtotitle($title) {

     $smallwordsarray = array(     'of','a','the','and','an','or','nor','but','is','if','then','else','when', 'at','from','by','on','off','for','in','to','into','with','it', 'as' );

     // Split the string into separate words
     $words = explode(' ', $title);

     foreach ($words as $key => $word) {

        // If this word is the first, or it's not one of our small words, capitalise it
        // with ucwords().
        if ($key == 0 or !in_array(strip_tags($word), $smallwordsarray)) {
             $old = strip_tags($word);
             $new = ucfirst($old);
             $words[key] = str_replace($old,$new,$word);
        }
     }

     // Join the words back into a string
     $newtitle = implode(' ', $words);

     return $newtitle;
}

答案 1 :(得分:0)

<?php 
function strtotitle($title) {
    $smallwordsarray = array( 'of','a','the','and','an','or','nor','but','is','if','then','else','when', 'at','from','by','on','off','for','in','to','into','with','it', 'as' );
    $words = $temp = explode(' ', strip_tags($title));

    foreach ($temp as $key => $word) {
        if ($key == 0 or !in_array($word, $smallwordsarray)) $temp[$key] = ucwords($word);
    }

    foreach($words as $index => $word) $title = str_replace($word, $temp[$index], $title);
    return $title;
}

var_dump(strtotitle('This is a simple sentence'));
var_dump(strtotitle('This is a <b>simple</b> <i>sentence</i>'));

答案 2 :(得分:-1)

您可以这样使用strip_tags

function strtotitle($title) {

  $smallwordsarray = array( 'of','a','the','and','an','or','nor','but','is','if','then','else','when', 'at','from','by','on','off','for','in','to','into','with','it', 'as' );

  // Remove HTML tags
  $titleWithoutTags = strip_tags($title);

  // Split the string into separate words
  $words = explode(' ', $titleWithoutTags);

  foreach ($words as $key => $word) {

   // If this word is the first, or it's not one of our small words, capitalise it
   // with ucwords().
   if ($key == 0 or !in_array($word, $smallwordsarray))
    $words[$key] = ucwords($word);
   }

   // Join the words back into a string
   $newtitle = implode(' ', $words);

   return $newtitle;
}