Intereting Posts
Дневная разница без выходных Ошибка функции обратного вызова (невозможно получить сообщение об ошибке, соответствующее имени вашего поля) Синтаксис PHP для результата функции разыменования Confusion PDO-only проблема: невозможно подключиться через сокет / Access denied / не удается подключиться к серверу (общий хост) Laravel Красноречивое отношение к многим, динамически добавляя запрос к связанной таблице Сессия уже запущена – игнорирование session_start () Xampp Контактная форма 7 сообщение в .asp Как добавить пользовательское расширение файла с точкой (blade.php) в NetBeans? Пошаговое руководство. Как выполнить Xdebug по устранению неполадок подключения к IDE клиента Кодирование и декодирование плавает в json с PHP без потери точности isset по атрибутам статического класса Как обрабатывать проверку CSRF в Yii2 Framework? facebook php, как вы используете пейджинг результатов? Как выбрать параметр в раскрывающемся списке на основе выбора в другом раскрывающемся списке PHP – Умный способ защиты $ _GET vars от вредоносной инъекции

Перенесите первый символ каждого слова в строку, кроме 'и', 'to' и т. Д.

Как я могу сделать верхний регистр первым символом каждого слова в строке принять пару слов, которые я не хочу их преобразовывать, например – и, и т. Д.?

Например, я хочу, чтобы это – ucwords('art and design') строку ниже,

'Арт, живопись и дизайн'

возможно ли это быть – strip_tags($text, '<p><a>') который мы разрешаем

и в строке?

или я должен использовать что-то еще? пожалуйста, порекомендуйте!

Благодарю.

Ни один из них не очень дружелюбен к UTF8, поэтому вот что работает безупречно (до сих пор)

 function titleCase($string, $delimiters = array(" ", "-", ".", "'", "O'", "Mc"), $exceptions = array("and", "to", "of", "das", "dos", "I", "II", "III", "IV", "V", "VI")) { /* * Exceptions in lower case are words you don't want converted * Exceptions all in upper case are any words you don't want converted to title case * but should be converted to upper case, eg: * king henry viii or king henry Viii should be King Henry VIII */ $string = mb_convert_case($string, MB_CASE_TITLE, "UTF-8"); foreach ($delimiters as $dlnr => $delimiter) { $words = explode($delimiter, $string); $newwords = array(); foreach ($words as $wordnr => $word) { if (in_array(mb_strtoupper($word, "UTF-8"), $exceptions)) { // check exceptions list for any words that should be in upper case $word = mb_strtoupper($word, "UTF-8"); } elseif (in_array(mb_strtolower($word, "UTF-8"), $exceptions)) { // check exceptions list for any words that should be in upper case $word = mb_strtolower($word, "UTF-8"); } elseif (!in_array($word, $exceptions)) { // convert to uppercase (non-utf8 only) $word = ucfirst($word); } array_push($newwords, $word); } $string = join($delimiter, $newwords); }//foreach return $string; } 

Применение:

 $s = 'SÃO JOÃO DOS SANTOS'; $v = titleCase($s); // 'São João dos Santos' 

поскольку мы все любим регулярные выражения, альтернативу, которая также работает с интерполяцией (в отличие от решения explode(" ",...) )

 $newString = preg_replace_callback("/[a-zA-Z]+/",'ucfirst_some',$string); function ucfirst_some($match) { $exclude = array('and','not'); if ( in_array(strtolower($match[0]),$exclude) ) return $match[0]; return ucfirst($match[0]); } 

edit добавлено strtolower() , или «Not» останется «Not».

Вам нужно будет использовать ucfirst и перебирать каждое слово, проверяя, например, массив исключений для каждого из них.

Что-то вроде следующего:

 $exclude = array('and', 'not'); $words = explode(' ', $string); foreach($words as $key => $word) { if(in_array($word, $exclude)) { continue; } $words[$key] = ucfirst($word); } $newString = implode(' ', $words); 

Как насчет этого ?

 $string = str_replace(' And ', ' and ', ucwords($string)); 

Я знаю, что через несколько лет после вопроса, но я искал ответ на застрахование надлежащего английского языка в названиях CMS, которые я программировал, и написал небольшую весовую функцию из идей на этой странице, поэтому я решил поделиться Это:

 function makeTitle($title){ $str = ucwords($title); $exclude = 'a,an,the,for,and,nor,but,or,yet,so,such,as,at,around,by,after,along,for,from,of,on,to,with,without'; $excluded = explode(",",$exclude); foreach($excluded as $noCap){$str = str_replace(ucwords($noCap),strtolower($noCap),$str);} return ucfirst($str); } 

Исключенный список был найден по адресу: http://www.superheronation.com/2011/08/16/words-that-should-not-be-capitalized-in-titles/

 USAGE: makeTitle($title);