[英]Translating JS function to PHP
我正在嘗試將JS函數“翻譯”為等效的PHP。 對於以下JS函數:
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()
周圍的某個地方失敗了。 我究竟做錯了什么?
- - 更多信息 - -
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')
為空,空白,未打印任何內容。
在我看來,這是元凶:
$t .= unichr(ord( $s1[$i] ) - substr($s, $n1, 1));
// ^ This
如果執行substr($ str,3),它將在第三個字母之后獲得所有內容,而不僅僅是第三個字母。 我假設這就是您的JS中的charCodeAt(...),只使用一個字母嗎?
要只收到一封信,請執行以下操作:
echo $str[$i]; // echos the first character of $str if $i was 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.