Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)
Autor
|
Tema: Cadena de texto a url string (Leído 1,061 veces)
|
|
El As del Club Paris
|
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: Guía de información útil para pingüinos Al pasarla por dicha funcion me devuelva: guia_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/urlSaludos
|
|
|
|
|
En línea
|
sudo suck --mycock -o force
|
|
|
|
madpitbull_99
|
Sí, la función de abajo la utilizo en CodeIgniter: public function downloadName($name) { $exp = explode(' ', $name); $imp = implode('_', $exp); return strtolower($imp) ; }Desconocía la función underscore() de CodeIgniter.
|
|
|
|
|
En línea
|
|
|
|
|
El As del Club Paris
|
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: 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.
|
|
|
|
|
En línea
|
sudo suck --mycock -o force
|
|
|
|
madpitbull_99
|
Para reemplazar los acentos se puede hacer así: /** * 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: /** * 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; }
|
|
|
|
|
En línea
|
|
|
|
Shell Root
Desconectado
Mensajes: 2.456
Alex Jurado
|
Se pueden usar vectores para los patrones y los reemplazos, y se debe de usar preg_replace porque ereg_replace esta obsoleto. /** * * **/ function replaceTildes( $pString ){ $_characters = array( '/á/','/é/','/í/','/ó/','/ú/' ); $_replacement = array( 'á','é','í','ó','ú' ); print preg_replace($_characters, $_replacement, $pString); }
|
|
|
|
|
En línea
|
 ---
|
|
|
WHK
吴阿卡
Ex-Staff
Desconectado
Mensajes: 4.113
The Hacktivism is not a crime
|
Y donde dejan los carácteres unicodes? Esto uso yo en mi sistema web: 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.
|
|
|
|
|
En línea
|
|
|
|
|
|