2012-12-30 42 views
1

我試圖將一個JS函數「翻譯」爲PHP等價物。 對於下面的JS函數:將JS函數翻譯爲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)); 
} 

我這樣做在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'); 
} 

而且它周圍的地方我urldecode()失敗persume。我究竟做錯了什麼?

---更多信息---

結果爲JS的功能,例如dF('8%3Fn%3FAAl%3A%3Ej%3D%3C%3B%3A%3DA%3Ail%40llk%3Aj%3B8%38El%3B%40m','55');07f799d26b5432592ad8ddc2b306d38e

但我沒有得到這個結果。從第一個答案修復後, echo dF('8%3Fn%3FAAl%3A%3Ej%3D%3C%3B%3A%3DA%3Ail%40llk%3Aj%3B8%38El%3B%40m', '55')爲空,空白,沒有任何打印。

+1

什麼是「失敗」是什麼意思? – sachleen

回答

5

看起來我這個樣子是罪魁禍首:

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

如果你SUBSTR($海峽,3)它獲得的第三個字母后的一切,不只是第三個字母。我認爲這就是JS中的charCodeAt(...),只使用一個字母?

要獲得只差一個字母,這樣做:

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

所以你建議我做'substr($ s1,$ i,$ i + 1)'? – jOpacic

+0

實際上,閱讀帖子後,我再次更新了它:p –

+0

...或者仍然使用'substr'並將其限制爲一個字母:'substr($ s1,$ i,1)' – feeela