Foros del Web » Programando para Internet » PHP »

cortar caracteres especiales con substr

Estas en el tema de cortar caracteres especiales con substr en el foro de PHP en Foros del Web. tengo un problemita al cortar una cadena que trae acentos... ej $cadena = "El Verano es Más Corto que el Invierno"; devuelve en un echo ...
  #1 (permalink)  
Antiguo 04/11/2007, 10:43
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
cortar caracteres especiales con substr

tengo un problemita al cortar una cadena que trae acentos... ej

$cadena = "El Verano es Más Corto que el Invierno";

devuelve en un echo "El Verano es Más Corto que el Invierno"


si corto por decir...

$n_cadena = substr("$cadena", 0, 18);

me devuelve.

El Verano es M&aac

:/ alguna solucion al problemita de los caracteres especiales al cortar ....

saludos...
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #2 (permalink)  
Antiguo 04/11/2007, 12:47
 
Fecha de Ingreso: mayo-2005
Mensajes: 74
Antigüedad: 19 años
Puntos: 2
Re: cortar caracteres especiales con substr

puedes hacerte dos funciones, una que cambie los caracteres especiales, por sus caracteres reales (que en substr contarán como solo 1 y no se cortarán)

y otra función para volverlos a poner...algo tal que así:


function ponCaracteresReales($texto){
$txt = $texto;
$txt = str_replace("á","á",$txt);
$txt = str_replace("é","é",$txt);

// y así con todos los caracteres y luego devuelves

return $txt;

}

function ponCaracteresEspeciales($texto){
$txt = $texto;
$txt = str_replace("á","á",$txt);
$txt = str_replace("é","é",$txt);

//continua poniendo los demas caracteres a sustituir...
return $txt;
}

con estas dos funciones que tu completarás puedes hacer el proceso sin peligro de que te salgan cosas "raras"


$cadena = "El Verano es Más Corto que el Invierno";

$cadena = ponCaracteresReales($cadena);
$n_cadena = substr("$cadena", 0, 18);
$n_cadena = ponCaracteresEspeciales($n_cadena);


Listo!! te devolverá:
El Verano es Más C


espero te sirva.
  #3 (permalink)  
Antiguo 04/11/2007, 21:09
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Re: cortar caracteres especiales con substr

En otro hilo dan esta funcion que arregla los acentos (todos)

Cita:
function crossUrlDecode($source) {
// arregla acentos!
$decodedStr = '';
$pos = 0;
$len = strlen($source);
while ($pos < $len) {
$charAt = substr ($source, $pos, 1);
if ($charAt == 'Ã') {
$char2 = substr($source, $pos, 2);
$decodedStr .= htmlentities(utf8_decode($char2),ENT_QUOTES,'ISO-8859-1');
$pos += 2;
}
elseif(ord($charAt) > 127) {
$decodedStr .= "&#".ord($charAt).";";
$pos++;
}
elseif($charAt == '%') {
$pos++;
$hex2 = substr($source, $pos, 2);
$dechex = chr(hexdec($hex2));
if($dechex == 'Ã') {
$pos += 2;
if(substr($source, $pos, 1) == '%') {
$pos++;
$char2a = chr(hexdec(substr($source, $pos, 2)));
$decodedStr .= htmlentities(utf8_decode($dechex . $char2a),ENT_QUOTES,'ISO-8859-1');
}
else {
$decodedStr .= htmlentities(utf8_decode($dechex));
}
}
else {
$decodedStr .= $dechex;
}
$pos += 2;
}
else {
$decodedStr .= $charAt;
$pos++;
}
}
return $decodedStr;
}
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




La zona horaria es GMT -6. Ahora son las 14:59.