Foros del Web » Programando para Internet » PHP »

ucfirst - Primera letra caracter especial

Estas en el tema de ucfirst - Primera letra caracter especial en el foro de PHP en Foros del Web. Hola a tod@s. Os escribo con un pequeño problemilla, el cual querría saber si tiene una solución rápida, sin hacer una función específica. El planteamiento ...
  #1 (permalink)  
Antiguo 03/12/2008, 11:02
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
ucfirst - Primera letra caracter especial

Hola a tod@s.

Os escribo con un pequeño problemilla, el cual querría saber si tiene una solución rápida, sin hacer una función específica.

El planteamiento es el siguiente.

En un blog que he desarrollado personalmente, puede ser que escriban el texto de un titulo de tema en mayúsculas todo.

Para evitarlo, lo paso a minúsculas automáticamente, y le pongo la primera letra en mayúsculas. Osea:

Código PHP:
$finalString strtolower($texto);
$finalString ucfirst($finalString); 
Bueno, pues tengo un problema.

Cuando la cadena de texto tiene algún/os carácter/es/ especial/es delante, la primera letra de la palabra no la pone en mayúsculas.

Os pongo un ejemplo para que lo entendáis mejor.

Código PHP:
$texto "¡HOLA FOROSDELWEB!";
$finalString strtolower($texto);
$finalString ucfirst($finalString);
echo(
$finalString)
-> 
Esto muestra "¡hola forosdelweb!" 
Como el primer carácter sobre el que se aplica el ucfirst es !, pues la H es ignorada.

¿Se os ocurre o conocéis alguna solución?

Gracias de antemano.

Un saludo a todos
  #2 (permalink)  
Antiguo 03/12/2008, 11:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: ucfirst - Primera letra caracter especial

Lo unico que se me ocurre es que tomes el primer caracter y compruebes si es un signo usando expresiones regulares, y si lo es, te muevas al siguiente caracter.

Saludos.
  #3 (permalink)  
Antiguo 03/12/2008, 11:43
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Respuesta: ucfirst - Primera letra caracter especial

Hola GatorV

Gracias por contestar.

Me suponía que tenía que hacer eso.. pero quería evitarlo porque eso me lleva a :
  • Mirar el primer carácter, y si es signo, mirar el siguiente... y si es signo, mirar el siguiente.. hasta encontrar letra.
  • Al encontrar letra, romper la cadena y hacerle un ucfirst
Osea, una función específica que lo haga.

Bueno, pues la voy a montar.

Si tenéis alguna otra solución, decírmelo.

Un saludo.

Javier
  #4 (permalink)  
Antiguo 03/12/2008, 13:01
 
Fecha de Ingreso: abril-2008
Ubicación: Montevideo - Uruguay
Mensajes: 156
Antigüedad: 16 años
Puntos: 5
Respuesta: ucfirst - Primera letra caracter especial

Hi,
No necesariamente debes romper la cadena sino directamente reemplazar en la posición (Una vez que la encuentres).

Código PHP:
<?php
    $string 
"hola";
    
    function 
strtoupperchar(&$str$pos) {
        
$charstrtoupper($str[$pos]);
        
$str[$pos] = $char;
        return 
$str;
    }

    echo 
strtoupperchar($string1);
?>
Algo asi :S No es lo más depurado pero sirve para dar ideas.
Espero te sea util

-ByE-
__________________
--
Mi Portfolio Online! Visitalo!
--
  #5 (permalink)  
Antiguo 03/12/2008, 13:06
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Respuesta: ucfirst - Primera letra caracter especial

Hola Proguri.

Gracias por tu aportación.

Es correcto el NO romper la cadena.

Mi problema está viniendo a la hora de SABER cuando empieza la cadena (cuando terminan los posibles caracteres especiales del principio de la cadena).

Imaginemos una cadena "¿¿¡¡COMO ESTÁN USTEDES!!??"

Tendría que recorrer los 4 primeros caracteres y después encontraría la letra.

Esto, se me está haciendo un poco complicado (quzás por el desconocimiento de la potencia de las expresiones regulares.

¿Alguna aportación?

Gracias a tod@s.

Javier
  #6 (permalink)  
Antiguo 03/12/2008, 13:19
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 8 meses
Puntos: 103
Respuesta: ucfirst - Primera letra caracter especial

tal vez no deberias poner muchos signos antes de los caracteres, ya que normalmente nadie en un blog escribe:¿¿¡¡COMO ESTÁN USTEDES!!?? , sino una frase sin signos.
tal vez lo puedas hacer si es realmente nescesario, pero es muy incomun que un blogger ponga titulos con muchos signos
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #7 (permalink)  
Antiguo 03/12/2008, 13:31
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Respuesta: ucfirst - Primera letra caracter especial

Hola chwc.

Gracias por tu aportación.

Realmente no estoy anticipándome, sino que esto ha venido bajo demanda.

Tengo lanzados una comunidad de Blogs con el mismo sistema todos (4 en concreto).

Ya en 3 de los 4 blogs, lanzan POSTs con caracteres al inicio (por ejemplo: ¡así soy yo!).

Entonces, es necesario tener controlado ese tema, y así le damos ya una funcionalidad que deja el blog siempre limpio y con una lógica de lectura continua.

Entonces, es por ello que sigo buscando la manera de "encontrar" el primer carácter de después de los caracteres especiales.

Si alguien tiene más aportaciones, las aceptaré gustoso.

Un saludo.

Javier
  #8 (permalink)  
Antiguo 03/12/2008, 13:34
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: ucfirst - Primera letra caracter especial

Hola el_javi, a ver si esto te ayuda:

Código PHP:
 
 
/* En tus funciones copia estas dos*/
function uc_first_aux($str){
 return 
ucfirst($str[1]);
}
function 
uc_first($str){
 return 
preg_replace_callback('/(\w){1}/i',"uc_first_aux",$str,1);
}

#luego, a un string como este
$str strtolower("¿¿¡¡COMO ESTÁN USTEDES!!??");
#Lo tratas así:
echo uc_first($str); 
Saludos, contanos si te ayudo
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #9 (permalink)  
Antiguo 03/12/2008, 13:44
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Respuesta: ucfirst - Primera letra caracter especial

Estimado compañero nicolaspar.

Muchísimas gracias por tu aportación.

A la primera ha funcionado.

La estoy aplicando en el resto de blogs, como librería interna.

Gracias de nuevo, y ¡CASO CERRADO! jejejejeje

Saludos a todos

Javier
  #10 (permalink)  
Antiguo 03/12/2008, 13:48
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: ucfirst - Primera letra caracter especial

Genial, agregado a las FAQs!

PD: Cambia en el patrón \w por [a-z], quedaría así:
Código PHP:
...
return 
preg_replace_callback('/([a-z]){1}/i',"uc_first_aux",$str,1);
... 
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:13.