Foros del Web » Programando para Internet » PHP »

Aporte: Funcion para Capitalizar Texto (Avanzada)

Estas en el tema de Aporte: Funcion para Capitalizar Texto (Avanzada) en el foro de PHP en Foros del Web. EDITO ESTE TEMA: 22/05/2015 La función anterior era bastante fea, y como me llegan notificaciones de que a varias personas les resulta útil, publico una ...
  #1 (permalink)  
Antiguo 14/12/2012, 15:48
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Información Aporte: Funcion para Capitalizar Texto (Avanzada)

EDITO ESTE TEMA: 22/05/2015

La función anterior era bastante fea, y como me llegan notificaciones de que a varias personas les resulta útil, publico una actualización mas prolija.
Esta funcion lo que hace es pasar a mayuscula la primer letra de cada palabra, dejando en minuscula el resto, pero teniendo en cuenta que si una palabra es un articulo del lenguaje, por ej: "a", "la", "los", etc debe permanecer en minúsculas, a exepcion de que sea la primer palabra de una frase, en ese caso debe tener la primer letra en mayúscula.

Código PHP:
Ver original
  1. <?php
  2.  
  3. function Capitalizar_Semantica($text) {
  4.  
  5.     // Articulos del lenguaje, no llevan mayusculas a menos que esten luego de un signo de puntuacion.
  6.     $articulos = array(' a',' al',' de',' del',' lo',' el',' la',' los',' las',' un',' una',' unos',' unas');
  7.     // Signos de puntucacion, despues de uno de estos va mayuscula.
  8.     $puntucacion = array('.');
  9.  
  10.     $text = mb_convert_case(trim(str_replace("  ", " ", $text)), MB_CASE_TITLE, "UTF-8");
  11.  
  12.     // Identificar cada signo de puntucion.
  13.     $text = str_replace(array_map(function($e) { return "$e "; }, $puntucacion), $puntucacion, $text);
  14.     $text = str_ireplace($articulos, $articulos, $text);
  15.     $text = str_replace($puntucacion, array_map(function($e) { return "$e "; }, $puntucacion), $text);
  16.  
  17.     return $text;
  18. }

Los comentarios que siguen a continuación, fueron hechos sobre la función original, muchas de las sugerencias hechas están ya implementadas en esta nueva función.

Saludos.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 22/05/2015 a las 09:53 Razón: Update.
  #2 (permalink)  
Antiguo 14/12/2012, 16:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

¿Podrías poner ejemplos de que es lo que hace? Ten en cuenta que existen ya funciones en PHP nativas como mb_strtoupper, o strtoupper.

Saludos.
  #3 (permalink)  
Antiguo 15/12/2012, 16:06
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

EDITO ESTE TEMA: 22/05/2015

Un ejemplo:

Código PHP:
Ver original
  1. echo Capitalizar_Semantica("una FRASE   a la larga. La voy a PROBAR  ");
  2. // Una Frase a la larga. La Voy a Probar
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 22/05/2015 a las 09:54
  #4 (permalink)  
Antiguo 16/12/2012, 23:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

O sea que es como ucwords, pero avanzado?

El único inconveniente que le veo a tu función es que los artículos y preposiciones siempre quedarán en minúsculas porque no verificas si es la primera palabra de la frase o está precedido de un punto.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 17/12/2012, 08:34
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

EDITO ESTE TEMA: 22/05/2015

Sugerencia de @Triby aceptada e implementada.

PREGUNTA DEL TEMA ANTIGUO:
El que voto negativo a la función, ¿Cual fue el motivo? (antes se podía votar negativo)
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 22/05/2015 a las 09:58 Razón: Update.
  #6 (permalink)  
Antiguo 17/12/2012, 08:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

Ah, ese último fui yo.

Y la razón es simple, le di "no me gusta", eso es todo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 17/12/2012, 08:43
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

EDITO ESTE TEMA: 22/05/2015

Es comprensible que @pateketrueke halla votado negativo, algunas cosas estaban bastante feas.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 22/05/2015 a las 09:59
  #8 (permalink)  
Antiguo 17/12/2012, 08:47
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años, 6 meses
Puntos: 58
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

Yo la verdad lo veo demasiado rebuscado. Creo que con pasar el string a minusculas, luego pasarlo a UCWord o UCFirst no recuerdo bien y capitalizar las palabras a no ser que sean artículos, como "de" o del", etc. sería suficiente.

Pero se agradece el aporte por supuesto.

Bueno en realidad es lo que hace no? Sólo que como dices, no tendrías problemas con la codificación de caracteres. EN ese caso podría ser útil. La verdad tengo usado UCFirst o similares con UTF-8 y sin problemas.
  #9 (permalink)  
Antiguo 17/12/2012, 08:57
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

EDITO ESTE TEMA: 22/05/2015

En efecto, la versión original era bastante rebuscada.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 22/05/2015 a las 10:00
  #10 (permalink)  
Antiguo 17/12/2012, 09:06
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años, 6 meses
Puntos: 58
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

De hecho yo trabajo con una base de datos donde los datos están en mayúsculas o todo minúsuclas o mezclado todo... un caos. Cada uno mete los datos como le viene en gana. Ahora guardo todo en la bd en minúsculas y con lo que te decía lo arreglo antes de mostrarlo.

De momento así se queda pero si veo que me da algún problemilla vendré a probar tu código.
  #11 (permalink)  
Antiguo 17/12/2012, 12:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

Yo te recomendaría completar tu función usando las funciones Multybyte de PHP, en este caso mb_convert_case te serviría perfectamente.
  #12 (permalink)  
Antiguo 17/12/2012, 12:53
lamek
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Aporte: Funcion para Capitalizar Texto (Avanzada)

Gracias por este aporte, me puede servir

Etiquetas: funcion, aportes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 08:18.