Foros del Web » Programando para Internet » PHP »

Convertir funcion JavaScript a funcion PHP

Estas en el tema de Convertir funcion JavaScript a funcion PHP en el foro de PHP en Foros del Web. Hola gente, llevo ya un par de días intentando convertir una función de JavaScript a una función PHP, su función es la de decodificar una ...
  #1 (permalink)  
Antiguo 20/02/2012, 12:03
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 5 meses
Puntos: 9
Convertir funcion JavaScript a funcion PHP

Hola gente, llevo ya un par de días intentando convertir una función de JavaScript a una función PHP, su función es la de decodificar una cadena de caracteres sin sentido por una legible con las coincidencias de posición de las letras de orig y dest.

Función JavaScript:
Código:
function decodem(txt){
	var orig="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-.@";
	var dest="bcqNdghT1YUV2Xi9jaQklm0LpJDr@stKuv6734wx_yzABCE.FGHMnIOPRSefWZ58-o";
	var out="";
	if(txt!=""){
		for(i=0;i<txt.length;i++){
			ind=orig.indexOf(txt.substring(i,i+1));
			if(ind!=-1) out+=dest.substring(ind,ind+1);
			else out+=txt.substring(i,i+1);
		}
	}
	return out;
}
Esta es la función de PHP que he conseguido estar más cerca:
Código PHP:
$encontrar =array('a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''@''p''q''r''s''t''u''v''w''x''y''z''A''B''C''D''E''F''G''H''I''J''K''L''M''N''O''P''Q''R''S''T''U''.''V''W''X''Y''Z''1''2''3''4''5''6''7''8''9''0''_''-');
$reemplazar=array('b''c''q''N''d''g''h''T''1''Y''U''V''2''X''i''o''9''j''a''Q''k''l''m''0''L''p''J''D''r''@''s''t''K''u''v''6''7''3''4''w''x''_''y''z''A''B''C''E''-''.''F''G''H''M''n''I''O''P''R''S''e''f''W''Z''5''8');
$tag_url=str_replace($encontrar$reemplazar$texto);
echo 
$tag_url
Funciona casi bien, cuando encuentra un caracter en la cadena, lo sustituye por la letra que hay en su misma posición en $reemplazar.
El problema es que una vez sustituye una letra, si en el resto del array $encontrar vuelve a estar la letra sustituida la vuelve a sustituir. Por ejemplo con la letra "a", la sustituye por "b" correctamente, pero como la siguiente en el array es la "b" ésta la vuelve a sustituir por la "c". Lo que quiero es que se sustituya una sóla vez. Alguien puede ayudarme?? Mil gracias!!!!!!
  #2 (permalink)  
Antiguo 20/02/2012, 13:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Convertir funcion JavaScript a funcion PHP

Usa la misma estructura que en JS, no necesitas usar str_replace, puedes usar un for() e ir recorriendo la cadena de la misma manera que en JS y generar un string nuevo.

Saludos.
  #3 (permalink)  
Antiguo 20/02/2012, 15:06
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 5 meses
Puntos: 9
Respuesta: Convertir funcion JavaScript a funcion PHP

GatorV gracias por aclararme las ideas. Ya me funciona, este es el código por si alguien entra necesitándolo:

Código PHP:
$encontrar =array('a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''s''t''u''v''w''x''y''z''A''B''C''D''E''F''G''H''I''J''K''L''M''N''O''P''Q''R''S''T''U''V''W''X''Y''Z''1''2''3''4''5''6''7''8''9''0''_''-''.''@');
$reemplazar=array('b''c''q''N''d''g''h''T''1''Y''U''V''2''X''i''9''j''a''Q''k''l''m''0''L''p''J''D''r''@''s''t''K''u''v''6''7''3''4''w''x''_''y''z''A''B''C''E''.''F''G''H''M''n''I''O''P''R''S''e''f''W''Z''5''8''-''o');

$texto='o18@';

    for (
$i=0;$i<strlen($texto);$i++) {
    
$pos=array_search($texto[$i],$encontrar);
    
$resultado.=$reemplazar[$pos];
    };

    echo 
$resultado
Me funciona a la perfección, pero tengo un problema, que si lo pongo en una función, al pasarle la cadena por $texto, me da error en el array_search. Puede que al pasarle la variable lo tome como otra cosa que no sea texto??
  #4 (permalink)  
Antiguo 20/02/2012, 15:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Convertir funcion JavaScript a funcion PHP

Todo depende de como lo estés poniendo, publica aquí la función.

Saludos.
  #5 (permalink)  
Antiguo 20/02/2012, 16:06
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 5 meses
Puntos: 9
Respuesta: Convertir funcion JavaScript a funcion PHP

Éste es el código metido en una función y llamado como creo que está bien:

Código PHP:
$palabra='g@ur';

function 
decodificar($texto)
{
    for (
$i=0;$i<strlen($texto);$i++) {
    
$pos=array_search($texto[$i],$encontrar);
    
$resultado.=$reemplazar[$pos];
    };

    return 
$resultado;
};

echo 
decodificar($palabra); 

Y este es el error que me da:
Warning: array_search() expects parameter 2 to be array, null given in...
Un error por cada vez que ejecuta el for().
  #6 (permalink)  
Antiguo 20/02/2012, 16:15
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Convertir funcion JavaScript a funcion PHP

Prueba así, no olvides definir la variable $resultado:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $palabra = 'g@ur';
  4.  
  5. function decodificar($texto) {
  6.    
  7.     $resultado = '';
  8.    
  9.     $encontrar = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
  10.     'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
  11.     'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1',
  12.     '2', '3', '4', '5', '6', '7', '8', '9', '0', '_', '-', '.', '@');
  13.     $reemplazar = array('b', 'c', 'q', 'N', 'd', 'g', 'h', 'T', '1', 'Y', 'U', 'V', '2', 'X', 'i',
  14.     '9', 'j', 'a', 'Q', 'k', 'l', 'm', '0', 'L', 'p', 'J', 'D', 'r', '@', 's', 't', 'K', 'u', 'v',
  15.     '6', '7', '3', '4', 'w', 'x', '_', 'y', 'z', 'A', 'B', 'C', 'E', '.', 'F', 'G', 'H', 'M', 'n',
  16.     'I', 'O', 'P', 'R', 'S', 'e', 'f', 'W', 'Z', '5', '8', '-', 'o');
  17.    
  18.     for ($i = 0; $i < strlen($texto); $i++) {
  19.         $pos = array_search($texto[$i], $encontrar);
  20.         $resultado .= $reemplazar[$pos];
  21.     }
  22.    
  23.     return $resultado;
  24. }
  25.  
  26. echo decodificar($palabra);
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 20/02/2012, 16:21
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 5 meses
Puntos: 9
Respuesta: Convertir funcion JavaScript a funcion PHP

Gracias andresdzphp, ya me funciona. Había que meter dentro de la función los arrays $encontrar y $reemplazar.

Pero como siempre iban a ser los mismos datos de los arrays, pensaba que no hacía falta que lo leyera cada vez que ejecute la función, ya que se ejecutará muchísimas veces, y era por restarle carga...
  #8 (permalink)  
Antiguo 20/02/2012, 16:26
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Convertir funcion JavaScript a funcion PHP

Tienen que usar variables globales, pasarlos como parámetro o meterlos en la función. De alguna forma tiene que encontrar estos 2 array.

http://php.net/manual/es/language.variables.scope.php

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #9 (permalink)  
Antiguo 20/02/2012, 17:11
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 5 meses
Puntos: 9
Respuesta: Convertir funcion JavaScript a funcion PHP

Aaaammigo, desconocía que se podían llamar a las variables de fuera de la función como variables globales así: $GLOBALS['reemplazar']. No te acostarás sin saber una cosa más :D

Mil gracias a todos por vuestra ayuda!!!!

Etiquetas: funcion, javascript
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:24.