Cadena de texto a url string

Iniciado por [u]nsigned, 29 Julio 2011, 17:16 PM

0 Miembros y 1 Visitante están viendo este tema.

[u]nsigned

Hola, queria saber si existe una funcion que me convierta una cadena de texto cualqueira a una cadena apta para usar como parte de una url, por ejemplo a partir de la cadena:

CitarGuía de información útil para pingüinos

Al pasarla por dicha funcion me devuelva:

Citarguia_de_infomracion_util_para_pinguinos

Algo similar a la funcion underscore() de CodeIgniter. El problema con esta funcion es que no convierte caracteres con acentos u otros caracteres que no sean letras o numeros...

El tema es que en mi web el usuario ingresara una caden de texto que sera usada como url http://www.miwebbsite.net/url

Saludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

madpitbull_99

Sí, la función de abajo la utilizo en CodeIgniter:

Código (php) [Seleccionar]
public function downloadName($name) {

$exp = explode(' ', $name);
$imp = implode('_', $exp);
return strtolower($imp) ;
}


Desconocía la función underscore() de CodeIgniter.



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

[u]nsigned

Gracias por responder. Lo que yo quiero es quitar acentos y esas cosas..el problema de underscore() es que no los convierte, solo los elimina, de momento se me ocurrio implementarlo asi:

Código (php) [Seleccionar]
function PoC($cadena)
{
   $cadena = strtolower($cadena);
   $cadena = preg_replace('#[áàä]#','a',$cadena);
   $cadena = preg_replace('#[ééë]#','e',$cadena);
   $cadena = preg_replace('#[íìï]#','i',$cadena);
   $cadena = preg_replace('#[óòö]#','o',$cadena);
   $cadena = preg_replace('#[úùü]#','u',$cadena);

   return $cadena
}


Y ahi si ya puedo pasarla por underscore(). De momento es para lo unico que uso esta funcion, posiblemente edite la libreria (helper) inflector para agregarle esta funcionalidad.

Saludos y nuevamente gracias.

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

madpitbull_99

Para reemplazar los acentos se puede hacer así:

Código (php) [Seleccionar]
/**
* Devuelve la cadena introducida en codigo
* HTML correspondiete.
* Usada para filtrar tildes y otros caracteres.
*
* @return string
* @author MadPitbull
*/

public function replaceTildes ($cadena){
$cadena = htmlentities($cadena, ENT_QUOTES | ENT_IGNORE, "UTF-8");
return $cadena;
}


Aunque supongo que tu método también funciona. La versión "más chapucera" sería de ésta forma:

Código (php) [Seleccionar]
/**
* Devuelve la cadena introducida en codigoH TML correspondiente - version antigua -.
*
* @return string
* @author MadPitbull
*/
function replaceTildesOld($cadena){
$cadena = ereg_replace("á", "á", $cadena);
$cadena = ereg_replace("é", "é", $cadena);
$cadena = ereg_replace("í", "í", $cadena);
$cadena = ereg_replace("ó", "ó", $cadena);
$cadena = ereg_replace("ú", "ú", $cadena);
$cadena = ereg_replace("Á", "Á", $cadena);
$cadena = ereg_replace("É", "É", $cadena);
$cadena = ereg_replace("Í", "Í", $cadena);
$cadena = ereg_replace("Ó", "Ó", $cadena);
$cadena = ereg_replace("Ú", "Ú", $cadena);
$cadena = ereg_replace("Ñ", "Ñ", $cadena);
$cadena = ereg_replace("ñ", "ñ", $cadena);

return $cadena;
}




«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

Shell Root

Se pueden usar vectores para los patrones y los reemplazos, y se debe de usar preg_replace porque ereg_replace esta obsoleto.

Código (php) [Seleccionar]
 /**
  *
  *
  **/
  function replaceTildes( $pString ){
    $_characters  = array( '/á/','/é/','/í/','/ó/','/ú/' );
    $_replacement = array( 'á','é','í','ó','ú' );

    print preg_replace($_characters, $_replacement, $pString);
  }
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

WHK

Y donde dejan los carácteres unicodes?
Esto uso yo en mi sistema web:

Código (php) [Seleccionar]
function toFriendlyUrl($buff = false){
if(!$buff) $buff = $this->data;

/* Nulls */
for($c = 0; $c <= 255; $c++){
$replaces[$c] = '';
}

/* Numerics */
for($c = 48; $c <= 57; $c++){
$replaces[$c] = chr($c);
}

/* Upper chars */
for($c = 65; $c <= 90; $c++){
$replaces[$c] = chr($c);
}

/* Lower chars */
for($c = 97; $c <= 122; $c++){
$replaces[$c] = chr($c);
}

/* '"`´ */
$replaces[34] = '.';
$replaces[39] = '.';
$replaces[44] = '.';
$replaces[96] = '.';

/* Simbols */
$replaces[32] = '_'; /* Blank space */
$replaces[40] = '_';
$replaces[41] = '_';
$replaces[43] = '_';
$replaces[45] = '-';
$replaces[46] = '.';
$replaces[47] = '_';
$replaces[58] = '_';
$replaces[59] = '_';
$replaces[61] = '-';
$replaces[91] = '-';
$replaces[92] = '_';
$replaces[93] = '-';
$replaces[95] = '_';
$replaces[123] = '-';
$replaces[124] = '-';
$replaces[125] = '-';
$replaces[126] = '-';
$replaces[128] = 'e';
$replaces[130] = '_';
$replaces[131] = 'f';
$replaces[132] = '_';
$replaces[133] = '_';
$replaces[138] = 's';
$replaces[139] = '-';
$replaces[140] = 'ce';
$replaces[142] = 'z';
$replaces[149] = '.';
$replaces[150] = '-';
$replaces[151] = '-';
$replaces[152] = '-';
$replaces[153] = 'tm';
$replaces[154] = 's';
$replaces[155] = '-';
$replaces[152] = 'oe';
$replaces[158] = 'z';
$replaces[159] = 'y';
$replaces[160] = '_';
$replaces[162] = 'c';
$replaces[163] = 'f';
$replaces[164] = '.';
$replaces[165] = 'y';
$replaces[166] = '-';
$replaces[167] = 's';
$replaces[169] = 'c';
$replaces[170] = 'a';
$replaces[174] = 'r';
$replaces[175] = '-';
$replaces[176] = '.';
$replaces[178] = '2';
$replaces[179] = '3';
$replaces[181] = 'u';
$replaces[182] = 'p';
$replaces[183] = '.';
$replaces[184] = '_';
$replaces[185] = 'i';
$replaces[186] = 'o';
$replaces[188] = '14';
$replaces[189] = '12';
$replaces[190] = '34';
$replaces[192] = 'A';
$replaces[193] = 'A';
$replaces[194] = 'A';
$replaces[195] = 'A';
$replaces[196] = 'A';
$replaces[197] = 'A';
$replaces[198] = 'AE';
$replaces[199] = 'C';
$replaces[200] = 'E';
$replaces[201] = 'E';
$replaces[202] = 'E';
$replaces[203] = 'E';
$replaces[204] = 'I';
$replaces[205] = 'I';
$replaces[206] = 'I';
$replaces[207] = 'I';
$replaces[208] = 'D';
$replaces[209] = 'N';
$replaces[210] = 'O';
$replaces[211] = 'O';
$replaces[212] = 'O';
$replaces[213] = 'O';
$replaces[214] = 'O';
$replaces[215] = 'X';
$replaces[216] = 'O';
$replaces[217] = 'U';
$replaces[218] = 'U';
$replaces[219] = 'U';
$replaces[220] = 'U';
$replaces[221] = 'Y';
$replaces[222] = 'p';
$replaces[223] = 'b';
$replaces[224] = 'a';
$replaces[225] = 'a';
$replaces[226] = 'a';
$replaces[227] = 'a';
$replaces[228] = 'a';
$replaces[229] = 'a';
$replaces[230] = 'ae';
$replaces[231] = 'c';
$replaces[232] = 'e';
$replaces[233] = 'e';
$replaces[234] = 'e';
$replaces[235] = 'e';
$replaces[236] = 'i';
$replaces[237] = 'i';
$replaces[238] = 'i';
$replaces[239] = 'i';
$replaces[240] = 'o';
$replaces[241] = 'n';
$replaces[242] = 'o';
$replaces[243] = 'o';
$replaces[244] = 'o';
$replaces[245] = 'o';
$replaces[246] = 'o';
$replaces[248] = 'o';
$replaces[249] = 'u';
$replaces[250] = 'u';
$replaces[251] = 'u';
$replaces[252] = 'u';
$replaces[253] = 'y';
$replaces[254] = 'p';
$replaces[255] = 'y';

for($c = 0; $c <= 255; $c++){
$replaces_to[$c] = chr($c);
}

$return = preg_replace("@[^A-Za-z0-9\-_.]+@i", '', str_replace($replaces_to, $replaces, $buff));

/* Repeat simbols */
foreach(array('-', '_', '.') as $replace){
if(str_replace(str_repeat($replace, 2), '', $return) != $return){
$tofilter = explode(str_repeat($replace, 2), $return);
foreach($tofilter as $filter){
$return = str_replace(str_repeat($replace, 2), $replace, $return);
}
}
}

return $return;
}


Asó puedes ingresar carácteres basura e igual te lo va a transformar.