2012-12-30 3 views
1

J'essaie de "traduire" une fonction JS en équivalent PHP. Pour la fonction JS suivante:Traduction de la fonction JS vers PHP

function dF(s,n) 
{ 
n=parseInt(n); 
var s1=unescape(s.substr(0,n)+s.substr(n+1,s.length-n-1)); 
var t=''; 
for(i=0;i<s1.length;i++) 
{ 
t+=String.fromCharCode(s1.charCodeAt(i)-s.substr(n,1)); 
} 
return(unescape(t)); 
} 

Je l'ai fait en PHP:

function dF($s, $n) { 
    $n1 = intval($n); 
    $s1 = urldecode(substr($s, 0, $n1) . substr($s, $n1+1, strlen($s)-$n1-1)); 
    $t = ''; 
    for($i = 0; $i < strlen($s1); $i++) { 
     $t .= unichr(substr($s1, $i) - substr($s, $n1, 1)); 
    } 
    return urldecode($t); 
} 

/** 
* Return unicode char by its code 
* 
* @param int $u 
* @return char 
*/ 
function unichr($u) { 
    return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES'); 
} 

Et il échoue quelque part autour urldecode() je persume. Qu'est-ce que je fais mal?

--- Plus d'info ---

Résultat de la fonction JS, par exemple dF('8%3Fn%3FAAl%3A%3Ej%3D%3C%3B%3A%3DA%3Ail%40llk%3Aj%3B8%38El%3B%40m','55'); serait 07f799d26b5432592ad8ddc2b306d38e

Mais je ne reçois pas cela comme un résultat. Après les corrections de la première réponse, echo dF('8%3Fn%3FAAl%3A%3Ej%3D%3C%3B%3A%3DA%3Ail%40llk%3Aj%3B8%38El%3B%40m', '55') est vide, vide, rien n'est imprimé.

+1

qu'est-ce que "il ne parvient" signifie ?? – sachleen

Répondre

5

Me semble que c'est le coupable:

$t .= unichr(ord($s1[$i]) - substr($s, $n1, 1)); 
         //^This 

Si vous substr ($ str, 3), il obtient tout après la troisième lettre, pas seulement la troisième lettre. Je suppose que c'est ce que fait charCodeAt (...) dans votre JS, utilise seulement une lettre?

Pour obtenir une seule lettre, faites ceci:

echo $str[$i]; // echos the first character of $str if $i was 0 
+0

Donc vous me suggérez de faire 'substr ($ s1, $ i, $ i + 1)'? – jOpacic

+0

En fait, lisez le post, je l'ai mis à jour encore une fois: p –

+0

... ou encore utilisez 'substr' et limitez-le à une lettre:' substr ($ s1, $ i, 1) ' – feeela