Как отобразить первую букву как прописную букву?

У меня есть fname и lname в моей базе данных, и имя может быть сохранено как JOHN DOE или john DOE или JoHN dOE, но в конечном итоге я хочу показать его как John Doe

fname – это John, а lname – Doe

видя, что он помечен PHP:
или

string ucfirst ( string $str );

в верхнюю букву первого слова первого слова

или

string ucwords ( string $str );

в верхний регистр первой буквы каждого слова

вы можете использовать их в сочетании с

string strtolower ( string $str );

сначала нормализовать все имена в нижнем регистре.

Имейте в виду, что существуют другие форматы капитализации, такие как Джон МакДо, Джон Д'О, Джон де О и Джон ван ден Доу.

Я не уверен, где и как вы хотите отображать его, но если он находится на веб-странице, вы можете попробовать просто изменить отображение с помощью CSS. Попробуйте добавить:

 text-transform:capitalize; 

к соответствующему правилу, например:

 .name { text-transform:capitalize;} 

если вы поместите имя в div или span с классом = "name". Конечно, это никоим образом не изменит запись в базе данных, но я не понял, что было предпочтительнее.

Пример из php.net :

 $bar = 'HELLO WORLD!'; $bar = ucfirst($bar); // HELLO WORLD! $bar = ucfirst(strtolower($bar)); // Hello world! 

Имейте в виду заметки о местах, хотя …

Для простых имен это будет работать. Остерегайтесь особых случаев (например, «Рональд Макдональд» в приведенном ниже примере).

В SQL Server:

 SELECT --step 2: combine broken parts into a final name NAME_PARTS.FNAME_INITIAL + NAME_PARTS.REST_OF_FNAME AS FNAME ,NAME_PARTS.LNAME_INITIAL + NAME_PARTS.REST_OF_LNAME AS LNAME FROM ( --step 1: break name into 1st letter and "everything else" SELECT UPPER(SUBSTRING(TEST.FNAME,1,1)) AS FNAME_INITIAL ,UPPER(SUBSTRING(TEST.LNAME,1,1)) AS LNAME_INITIAL ,LOWER(SUBSTRING(TEST.FNAME,2,LEN(TEST.FNAME))) AS REST_OF_FNAME ,LOWER(SUBSTRING(TEST.LNAME,2,LEN(TEST.LNAME))) AS REST_OF_LNAME FROM ( --step 0: generate some test data SELECT 'john' AS FNAME, 'doe' as LNAME UNION SELECT 'SUZY', 'SMITH' UNION SELECT 'bIlLy', 'BOb' UNION SELECT 'RoNALD', 'McDonald' UNION SELECT 'Edward', NULL UNION SELECT NULL, 'Jones' ) TEST ) NAME_PARTS 

В Oracle

 SELECT --step 2: combine broken parts into a final name NAME_PARTS.FNAME_INITIAL || NAME_PARTS.REST_OF_FNAME AS FNAME ,NAME_PARTS.LNAME_INITIAL || NAME_PARTS.REST_OF_LNAME AS LNAME FROM ( --step 1: break name into 1st letter and "everything else" SELECT UPPER(SUBSTR(TEST.FNAME,1,1)) AS FNAME_INITIAL ,UPPER(SUBSTR(TEST.LNAME,1,1)) AS LNAME_INITIAL ,LOWER(SUBSTR(TEST.FNAME,2,LENGTH(TEST.FNAME))) AS REST_OF_FNAME ,LOWER(SUBSTR(TEST.LNAME,2,LENGTH(TEST.LNAME))) AS REST_OF_LNAME FROM ( --step 0: generate some test data SELECT 'john' AS FNAME, 'doe' as LNAME FROM DUAL UNION SELECT 'SUZY', 'SMITH' FROM DUAL UNION SELECT 'bIlLy', 'BOb' FROM DUAL UNION SELECT 'RoNALD', 'McDonald' FROM DUAL UNION SELECT 'Edward', NULL FROM DUAL UNION SELECT NULL, 'Jones' FROM DUAL ) TEST ) NAME_PARTS 

Объединение сокращенных функций PHP strtolower и ucwords решает вашу проблему:

 function ucname($f, $l) { return ucwords(strtolower($f." ".$l)); } echo ucname($fname, $lname); 

Обратите внимание на то, что вы можете сделать такую ​​сортировку данных на разных этапах:

  1. перед вставкой, в вашем приложении
  2. во время вставки, со строковыми функциями в запросе SQL insert / update
  3. во время извлечения, со строковыми функциями в запросе SQL select
  4. после извлечения, в вашей заявке

Измените имена на нижние и затем добавьте («A» – «a») к первой букве имени fname & lname.