php - 将 JS 函数转换为 PHP

标签 php javascript

我正在尝试将 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

关于php - 将 JS 函数转换为 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14087403/

相关文章:

javascript - 有没有办法让屏幕阅读器在渲染元素时只宣布一次?

javascript - 将提示响应存储在 localStorage 中并检索

javascript - vuejs - 在函数调用时访问动态创建的输入

c# - 从旧 URL 重定向到最新已知 URL 的巧妙方法

php - 将翻译放在 JSON 中是个好主意吗?

php - 使用 PHP 通过 JavaScript 编写 HTML

php - 如何使用 PHP 读取远程服务器上的目录内容?

javascript - 在正常和全屏模式之间切换窗口

php - NetBeans、PhpStorm...自定义 PHP 扩展的代码完成

php - Codeigniter 上具有特定 ID/行的 SQL 查询