Ver Mensaje Individual
  #4 (permalink)  
Antiguo 08/04/2020, 11:15
tuadmin
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: problema para mostrar ascii

Cita:
Iniciado por julslash Ver Mensaje
muchisimas gracias me ayudo muchisimo todas tus recomendaciones y codigos.

partiendo de que la clave guardada en el sql server es

//E$Àá[ØÍÍØ

cuando ejecuto el codigo php me imprime este resultado

/E$��[����

estuve investigando y corri un codigo para ver los caracteres ascii y no logro verlos cuando el numero es mayor a 128 desde ese en adelante los veo de la siguiente forma �
Ø = 155
À = 183
á = 160
Í = 214

eso tiene que ver con el numero de bytes?
el tema de codificacion es un tema muy profundo, pero bueno se explica que la codificacion que esta usando esa Funcion, es para Tratar con "CHARS"

cada CHAR por ejemplo la letra "A" o simbolo Ocupa 8 bits
A="01000001" //Esto sería una 'A' y a su lado los valores de sus Bits 0 y 1;
eso en una tabla ASCII, la tabla ASCII o ANSI ya no recuerdo bien esta parte,
con esos 8 bits puedes representar 255 simbolos; de ahi este fragmento "%255" con esto "%255" indica que si te pasas de los 255, al hacer el modulo no pases del valor de 255,

si tu suma te dio 10000; al pasarle el modulo de 255 te dara como resultado 235

Código HTML:
1000%255 = 235
bueno volviendo al tema, este valor que buscas "E$Àá[ØÍÍØ" lo que necesitas no es la representacion visual, lo que necesitas es saber el Valor del tipo INT de cada simbolo

como pausa leete este enlace, describe lo que es ANSI y ASCII

http://ascii-table.com/ansi-codes.php

en resument este valor "E$Àá[ØÍÍØ" trata de obtener su VALOR de cada Simbolo , no convirtiendo el string "E$Àá[ØÍÍØ" , sino el que esta almacenado en la base de datos, revisa como obtener la represantacion de BYTES o HEXADECIMALES cuando obtengas ello sera mas facil verificar si el resultado que te Otorga PHP es correcto


bueno en php te dejo 2 funciones para mostrar los valoers decimales hexadecimales,


Código PHP:
function representacionAnsiHorizontal($cadena)
{
    
$array_de_chars=(unpack('C*',$cadena));
    echo 
"<pre>".PHP_EOL;
    echo 
str_pad"Char",13,' ').'= ';
    foreach(
$array_de_chars as $char){
        echo 
str_padchr($char) ,5,' ');
    }
    echo 
PHP_EOL;
    echo 
str_pad"DECIMAL",13,' ').'= ';
    foreach(
$array_de_chars as $char){
        echo 
str_pad$char ,5,' ');
    }
    echo 
PHP_EOL;
    echo 
str_pad"HEXADECIMAL",13,' ').'= ';
    foreach(
$array_de_chars as $char){
        echo 
str_pad'x'.dechex($char) ,5,' ');
    }
    echo 
PHP_EOL;
    echo 
"</pre>".PHP_EOL;
}
function 
representacionAnsi($cadena)
{
    
$array_de_chars=(unpack('C*',$cadena));
    echo 
"<pre ><code>".PHP_EOL;
    
    echo 
str_pad"Decimal",13,' ',STR_PAD_BOTH);
    echo 
str_pad"HExadecimal",13,' ',STR_PAD_BOTH);
    echo 
str_pad"Binario",13,' ',STR_PAD_BOTH);
    echo 
str_pad"Char/Simbolo",5,' ',STR_PAD_BOTH);
    
    echo 
PHP_EOL;
    echo 
str_repeat('-',(13*4));
    echo 
PHP_EOL;
    
    foreach(
$array_de_chars as $char){
        
$binario str_pad(decbin($char),8,'0',STR_PAD_LEFT);
                           
        echo 
str_pad'  '.$char ,13,' ');
        echo 
str_pad'  x'.dechex($char) ,13,' ');
        echo 
str_pad'  '.$binario ,13,' ');
        echo 
str_pad'  '.chr($char) ,5,' ',STR_PAD_BOTH);        
        echo 
PHP_EOL;
        
        
    }
    echo 
PHP_EOL;
    echo 
"</code></pre>".PHP_EOL;


y en tu codigo ya vees realmente lo que generaste

Código PHP:
$datos "PROFIT1001   ";


function 
rand_string($data) {
  
$key_encript=" ";
  
    
$length strlen($data);
    
    for( 
$i 0$i $length$i++ ) {
        
        
$key_encript $key_encript.fun(substr($data$i1));
    }
    
   Return (
Substr($key_encript1strlen($key_encript)-1));

}

Function 
fun ($car){

 Return (
chr((((ord($car)+17)*11)%255)));



representacionAnsi(rand_string($datos)); 
y en pantalla te mostraria

Código HTML:
Ver original
  1. Decimal    HExadecimal    Binario   Char/Simbolo
  2. ----------------------------------------------------
  3.   47           x2f          00101111      /
  4.   69           x45          01000101      E
  5.   36           x24          00100100      $
  6.   192          xc0          11000000      
  7.   225          xe1          11100001      
  8.   91           x5b          01011011      [
  9.   216          xd8          11011000      
  10.   205          xcd          11001101      
  11.   205          xcd          11001101      
  12.   216          xd8          11011000      
  13.   29           x1d          00011101      
  14.   29           x1d          00011101      
  15.   29           x1d          00011101      

y solo basta que obtengas los Valores correctos binarios o Hex, o decimales, que estan almacenados en el Campo de tu de base de datos
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9