Техника CSS в порядке, но только изменяет представление строки в браузере. Лучший способ - сделать сам текст заглавными перед отправкой в браузер.
Большинство вышеприведенных имплиментаций в порядке, но ни одно из них не решает проблему того, что произойдет, если у вас есть смешанные слова падежей, которые необходимо сохранить, или если вы хотите использовать истинный заголовок падежа, например:
«Где учиться в докторантуре в США»
или
"IRS Form UB40a"
Также при использовании CultureInfo.CurrentCulture.TextInfo.ToTitleCase (string) сохраняются слова в верхнем регистре, как в
"спорт и MLB бейсбол", который становится "Sports And MLB Baseball", но если вся строка указана в верхнем регистре, тогда возникает проблема.
Итак, я собрал простую функцию, которая позволяет вам хранить заглавные и смешанные слова в регистре и делать маленькие слова строчными (если они не в начале и в конце фразы), включая их в строку specialCases и lowerCases массивы:
public static string TitleCase(string value) {
string titleString = ""; // destination string, this will be returned by function
if (!String.IsNullOrEmpty(value)) {
string[] lowerCases = new string[12] { "of", "the", "in", "a", "an", "to", "and", "at", "from", "by", "on", "or"}; // list of lower case words that should only be capitalised at start and end of title
string[] specialCases = new string[7] { "UK", "USA", "IRS", "UCLA", "PHd", "UB40a", "MSc" }; // list of words that need capitalisation preserved at any point in title
string[] words = value.ToLower().Split(' ');
bool wordAdded = false; // flag to confirm whether this word appears in special case list
int counter = 1;
foreach (string s in words) {
// check if word appears in lower case list
foreach (string lcWord in lowerCases) {
if (s.ToLower() == lcWord) {
// if lower case word is the first or last word of the title then it still needs capital so skip this bit.
if (counter == 0 || counter == words.Length) { break; };
titleString += lcWord;
wordAdded = true;
break;
}
}
// check if word appears in special case list
foreach (string scWord in specialCases) {
if (s.ToUpper() == scWord.ToUpper()) {
titleString += scWord;
wordAdded = true;
break;
}
}
if (!wordAdded) { // word does not appear in special cases or lower cases, so capitalise first letter and add to destination string
titleString += char.ToUpper(s[0]) + s.Substring(1).ToLower();
}
wordAdded = false;
if (counter < words.Length) {
titleString += " "; //dont forget to add spaces back in again!
}
counter++;
}
}
return titleString;
}
Это просто быстрый и простой метод, и, возможно, его можно немного улучшить, если вы хотите потратить на него больше времени.
если вы хотите сохранить заглавные буквы таких маленьких слов, как "a" и "of", просто удалите их из строкового массива особых случаев. В разных организациях действуют разные правила капитализации.
Вы можете увидеть пример этого кода в действии на этом сайте: Egg Donation London - этот сайт автоматически создает цепочки хлебных крошек в верхней части страниц путем анализа URL, например "/ services / uk- egg-bank / вводная часть "- тогда в каждом имени папки в следе дефисы заменяются пробелами и пишется с заглавной буквы, поэтому uk-egg-bank становится UK Egg Bank. (сохраняя заглавные буквы 'UK')
Расширение этого кода может состоять в том, чтобы иметь таблицу поиска акронимов и прописных / строчных слов в общем текстовом файле, таблице базы данных или веб-службе, чтобы список слов со смешанным регистром можно было поддерживать из одного места и применять для многих различных приложений, которые полагаются на функцию.