Página 1 de 1

Traducir código PHP a Perl

NotaPublicado: 2017-03-30 19:26 @851
por BigBear
Hola, estoy tratando de traducir este código PHP a Perl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1. function javascript_encode($text)
  2. {
  3.     $encoded = chunk_split(bin2hex($text), 2, '%');
  4.     return $encoded = '%' . substr($encoded, 0, strlen($encoded) - 1);
  5. }
Coloreado en 0.019 segundos, usando GeSHi 1.0.8.4

Una entrada a la función sería:
Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
  1.  <script>alert('hola');</script>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%27%68%6f%6c%61%27%29%3b%3c%2f%73%63%72%69%70%74%3e
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Lo uso en una aplicación en PHP para codificar código JavaScript, pero la verdad no sé bien el nombre de lo que estoy haciendo. Necesito que alguien me diga cómo se llama este método para buscar en Google para ver si se puede hacer en Perl y ver si hay ejemplos de cómo se hace. ¿Alguien me podría ayudar?

Re: Traducir código PHP a Perl

NotaPublicado: 2017-03-31 13:12 @592
por explorer
En Perl es muy sencillo, se puede hacer de varias maneras. Una de ellas es usando unpack():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.14;
  3.  
  4. my $texto = q[<script>alert('hola');</script>];
  5.  
  6. print "%$_" for unpack '(H2)*', $texto;
  7. print "\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Lo que se hace es leer bytes desde $texto, y lo convierte en grupos de dos nibbles, pasados a hexadecimal, a los que agregamos un '%' al principio de cada grupo. Más información, en tu propio ordenador con el comando perldoc perlpacktut, y en la Web.

Este tipo de codificación... realmente no sé si recibe un nombre concreto. En el módulo URI::Escape se le llama Percent-encode.

A propósito, la conversión contraria se puede hacer con esta expresión regular:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $cadena_codificada =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

(sacado de la documentación del mismo URI::Escape).

Re: Traducir código PHP a Perl

NotaPublicado: 2017-04-01 08:17 @387
por BigBear
Perfecto, gracias por la ayuda, explorer.