elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Cadena de texto a url string
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cadena de texto a url string  (Leído 4,667 veces)
[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Cadena de texto a url string
« en: 29 Julio 2011, 17:16 pm »

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:

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

Al pasarla por dicha funcion me devuelva:

Citar
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/url

Saludos


En línea

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

Mensajes: 1.911



Ver Perfil WWW
Re: Cadena de texto a url string
« Respuesta #1 en: 29 Julio 2011, 17:26 pm »

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

Código
  1. public function downloadName($name) {
  2.  
  3. $exp = explode(' ', $name);
  4. $imp = implode('_', $exp);
  5. return strtolower($imp) ;
  6. }

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


En línea



«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


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: Cadena de texto a url string
« Respuesta #2 en: 29 Julio 2011, 17:46 pm »

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
  1. function PoC($cadena)
  2. {
  3.   $cadena = strtolower($cadena);
  4.   $cadena = preg_replace('#[áàä]#','a',$cadena);
  5.   $cadena = preg_replace('#[ééë]#','e',$cadena);
  6.   $cadena = preg_replace('#[íìï]#','i',$cadena);
  7.   $cadena = preg_replace('#[óòö]#','o',$cadena);
  8.   $cadena = preg_replace('#[úùü]#','u',$cadena);
  9.  
  10.   return $cadena
  11. }

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

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

Mensajes: 1.911



Ver Perfil WWW
Re: Cadena de texto a url string
« Respuesta #3 en: 29 Julio 2011, 19:01 pm »

Para reemplazar los acentos se puede hacer así:

Código
  1. /**
  2.  * Devuelve la cadena introducida en codigo
  3.  * HTML correspondiete.
  4.  * Usada para filtrar tildes y otros caracteres.
  5.  *
  6.  * @return string
  7.  * @author MadPitbull
  8.  */
  9.  
  10. public function replaceTildes ($cadena){
  11. $cadena = htmlentities($cadena, ENT_QUOTES | ENT_IGNORE, "UTF-8");
  12. return $cadena;
  13. }

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

Código
  1. /**
  2.  * Devuelve la cadena introducida en codigoH TML correspondiente - version antigua -.
  3.  *
  4.  * @return string
  5.  * @author MadPitbull
  6.  */
  7. function replaceTildesOld($cadena){
  8. $cadena = ereg_replace("á", "á", $cadena);
  9. $cadena = ereg_replace("é", "é", $cadena);
  10. $cadena = ereg_replace("í", "í", $cadena);
  11. $cadena = ereg_replace("ó", "ó", $cadena);
  12. $cadena = ereg_replace("ú", "ú", $cadena);
  13. $cadena = ereg_replace("Á", "Á", $cadena);
  14. $cadena = ereg_replace("É", "É", $cadena);
  15. $cadena = ereg_replace("Í", "Í", $cadena);
  16. $cadena = ereg_replace("Ó", "Ó", $cadena);
  17. $cadena = ereg_replace("Ú", "Ú", $cadena);
  18. $cadena = ereg_replace("Ñ", "Ñ", $cadena);
  19. $cadena = ereg_replace("ñ", "ñ", $cadena);
  20.  
  21. return $cadena;
  22. }
En línea



«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
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: Cadena de texto a url string
« Respuesta #4 en: 29 Julio 2011, 20:28 pm »

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

Código
  1.  /**
  2.    *
  3.    *
  4.    **/
  5.   function replaceTildes( $pString ){
  6.     $_characters  = array( '/á/','/é/','/í/','/ó/','/ú/' );
  7.     $_replacement = array( '&aacute;','&eacute;','&iacute;','&oacute;','&uacute;' );
  8.  
  9.     print preg_replace($_characters, $_replacement, $pString);
  10.   }
En línea

Te vendería mi talento por poder dormir tranquilo.
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Cadena de texto a url string
« Respuesta #5 en: 30 Julio 2011, 06:53 am »

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

Código
  1. function toFriendlyUrl($buff = false){
  2. if(!$buff) $buff = $this->data;
  3.  
  4. /* Nulls */
  5. for($c = 0; $c <= 255; $c++){
  6. $replaces[$c] = '';
  7. }
  8.  
  9. /* Numerics */
  10. for($c = 48; $c <= 57; $c++){
  11. $replaces[$c] = chr($c);
  12. }
  13.  
  14. /* Upper chars */
  15. for($c = 65; $c <= 90; $c++){
  16. $replaces[$c] = chr($c);
  17. }
  18.  
  19. /* Lower chars */
  20. for($c = 97; $c <= 122; $c++){
  21. $replaces[$c] = chr($c);
  22. }
  23.  
  24. /* '"`´ */
  25. $replaces[34] = '.';
  26. $replaces[39] = '.';
  27. $replaces[44] = '.';
  28. $replaces[96] = '.';
  29.  
  30. /* Simbols */
  31. $replaces[32] = '_'; /* Blank space */
  32. $replaces[40] = '_';
  33. $replaces[41] = '_';
  34. $replaces[43] = '_';
  35. $replaces[45] = '-';
  36. $replaces[46] = '.';
  37. $replaces[47] = '_';
  38. $replaces[58] = '_';
  39. $replaces[59] = '_';
  40. $replaces[61] = '-';
  41. $replaces[91] = '-';
  42. $replaces[92] = '_';
  43. $replaces[93] = '-';
  44. $replaces[95] = '_';
  45. $replaces[123] = '-';
  46. $replaces[124] = '-';
  47. $replaces[125] = '-';
  48. $replaces[126] = '-';
  49. $replaces[128] = 'e';
  50. $replaces[130] = '_';
  51. $replaces[131] = 'f';
  52. $replaces[132] = '_';
  53. $replaces[133] = '_';
  54. $replaces[138] = 's';
  55. $replaces[139] = '-';
  56. $replaces[140] = 'ce';
  57. $replaces[142] = 'z';
  58. $replaces[149] = '.';
  59. $replaces[150] = '-';
  60. $replaces[151] = '-';
  61. $replaces[152] = '-';
  62. $replaces[153] = 'tm';
  63. $replaces[154] = 's';
  64. $replaces[155] = '-';
  65. $replaces[152] = 'oe';
  66. $replaces[158] = 'z';
  67. $replaces[159] = 'y';
  68. $replaces[160] = '_';
  69. $replaces[162] = 'c';
  70. $replaces[163] = 'f';
  71. $replaces[164] = '.';
  72. $replaces[165] = 'y';
  73. $replaces[166] = '-';
  74. $replaces[167] = 's';
  75. $replaces[169] = 'c';
  76. $replaces[170] = 'a';
  77. $replaces[174] = 'r';
  78. $replaces[175] = '-';
  79. $replaces[176] = '.';
  80. $replaces[178] = '2';
  81. $replaces[179] = '3';
  82. $replaces[181] = 'u';
  83. $replaces[182] = 'p';
  84. $replaces[183] = '.';
  85. $replaces[184] = '_';
  86. $replaces[185] = 'i';
  87. $replaces[186] = 'o';
  88. $replaces[188] = '14';
  89. $replaces[189] = '12';
  90. $replaces[190] = '34';
  91. $replaces[192] = 'A';
  92. $replaces[193] = 'A';
  93. $replaces[194] = 'A';
  94. $replaces[195] = 'A';
  95. $replaces[196] = 'A';
  96. $replaces[197] = 'A';
  97. $replaces[198] = 'AE';
  98. $replaces[199] = 'C';
  99. $replaces[200] = 'E';
  100. $replaces[201] = 'E';
  101. $replaces[202] = 'E';
  102. $replaces[203] = 'E';
  103. $replaces[204] = 'I';
  104. $replaces[205] = 'I';
  105. $replaces[206] = 'I';
  106. $replaces[207] = 'I';
  107. $replaces[208] = 'D';
  108. $replaces[209] = 'N';
  109. $replaces[210] = 'O';
  110. $replaces[211] = 'O';
  111. $replaces[212] = 'O';
  112. $replaces[213] = 'O';
  113. $replaces[214] = 'O';
  114. $replaces[215] = 'X';
  115. $replaces[216] = 'O';
  116. $replaces[217] = 'U';
  117. $replaces[218] = 'U';
  118. $replaces[219] = 'U';
  119. $replaces[220] = 'U';
  120. $replaces[221] = 'Y';
  121. $replaces[222] = 'p';
  122. $replaces[223] = 'b';
  123. $replaces[224] = 'a';
  124. $replaces[225] = 'a';
  125. $replaces[226] = 'a';
  126. $replaces[227] = 'a';
  127. $replaces[228] = 'a';
  128. $replaces[229] = 'a';
  129. $replaces[230] = 'ae';
  130. $replaces[231] = 'c';
  131. $replaces[232] = 'e';
  132. $replaces[233] = 'e';
  133. $replaces[234] = 'e';
  134. $replaces[235] = 'e';
  135. $replaces[236] = 'i';
  136. $replaces[237] = 'i';
  137. $replaces[238] = 'i';
  138. $replaces[239] = 'i';
  139. $replaces[240] = 'o';
  140. $replaces[241] = 'n';
  141. $replaces[242] = 'o';
  142. $replaces[243] = 'o';
  143. $replaces[244] = 'o';
  144. $replaces[245] = 'o';
  145. $replaces[246] = 'o';
  146. $replaces[248] = 'o';
  147. $replaces[249] = 'u';
  148. $replaces[250] = 'u';
  149. $replaces[251] = 'u';
  150. $replaces[252] = 'u';
  151. $replaces[253] = 'y';
  152. $replaces[254] = 'p';
  153. $replaces[255] = 'y';
  154.  
  155. for($c = 0; $c <= 255; $c++){
  156. $replaces_to[$c] = chr($c);
  157. }
  158.  
  159. $return = preg_replace("@[^A-Za-z0-9\-_.]+@i", '', str_replace($replaces_to, $replaces, $buff));
  160.  
  161. /* Repeat simbols */
  162. foreach(array('-', '_', '.') as $replace){
  163. if(str_replace(str_repeat($replace, 2), '', $return) != $return){
  164. $tofilter = explode(str_repeat($replace, 2), $return);
  165. foreach($tofilter as $filter){
  166. $return = str_replace(str_repeat($replace, 2), $replace, $return);
  167. }
  168. }
  169. }
  170.  
  171. return $return;
  172. }

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sacar trozo de una cadena de string en C#
.NET (C#, VB.NET, ASP)
Camboyano 1 11,435 Último mensaje 6 Mayo 2009, 14:27 pm
por Novlucker
Buscar cadena en String
.NET (C#, VB.NET, ASP)
.:Weeds:. 2 3,174 Último mensaje 11 Febrero 2011, 08:46 am
por .:Weeds:.
se corta la cadena string
Programación Visual Basic
rembolso 2 2,668 Último mensaje 1 Mayo 2011, 06:13 am
por rembolso
Cadena de bytes a string
Programación C/C++
85 4 4,215 Último mensaje 24 Febrero 2013, 00:18 am
por 85
[ALGORITMO] ampliar cadena string
Java
kondrag_X1 1 2,065 Último mensaje 8 Mayo 2013, 11:25 am
por DarkSorcerer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines