防止 CakePHP 从作为参数传递的 url 中剥离字符?

Prevent CakePHP from stripping chars from url passed as param?

我正在使用 CakePHP 2.6 开发应用程序,在将包含 url 个字符的字符串作为参数传递给控制器​​方法时遇到问题。

在我看来,我有一段代码回显出一系列包含数据的 table 行,并通过页面 ID、单元 ID 和 link 的 ID,有时可以包含 url.

<?php foreach($linklist as $l) { ?>
    <tr id="Link_<?php echo $l['ID']; ?>">
        <td><?php echo $l['Title']; ?></td>
        <td class="buttontd"><?php echo $this->Form->postlink('Delete', array('action' => 'deletelink', $this->request->params['pass'][0], $results[0]['PageUnitTypeID'], $l['ID']), array('class' => 'button delete')); ?></td>
    </tr>
<?php } ?>

postlink 按钮将信息传递给控制器​​中的 'deletelink' 操作时,url 看起来像这样:

http://mydomainname.com/webpages/deletelink/239/7/urlhttp%3A%2F%2Fwww.google.co.uk%2F

这表明 url 已作为字符串传递,但在操作中,当我尝试仅 var_dump() 第三个参数时,它 returns 是 [=17 的字符串=] 仅此而已阻止我对参数进行 substr() 调用以检查前 3 个字符是否等于 url

我试图将参数包装在 serialize()urlencode() 中的 postlink 调用中,但都没有达到返回完整字符串的预期效果

urlhttp%3A%2F%2Fwww.google.co.uk%2F

有谁知道在不丢失重要字符的情况下成功传递参数的方法吗?

更新 1:删除link 操作

public function deletelink($pid = null, $uid = null, $lid = null) {
    $this->autoRender = false;

    if (!is_null($pid) && is_numeric($pid) && !is_null($uid) && is_numeric($uid)) {

        if (!is_null($lid)) {

            if (substr($lid, 0, 3) == 'url') {
                echo substr($lid, 0, 3);
            } else {
                echo substr($lid, 0, 3);
            }

        } else {
            $this->Session->setFlash('It is unknown which link you wish to delete from the webpage', 'flash_message_bar', array('class' => 'error'));
            return $this->redirect(array('action' => 'edit', $pid));
        }

    } else {
        $this->Session->setFlash('It is unknown which on which webpage you wish to delete a link', 'flash_message_bar', array('class' => 'error'));
        return $this->redirect(array('action' => 'index'));
    }
}

CakePHP(或者 mod_rewrite 我会说)对你的 URL 的形成方式感到困惑。

您最安全的选择是 base64_encode 视图中的 url 参数,这将导致调用类似于:

http://mydomainname.com/webpages/deletelink/239/7/dXJsaHR0cDovL3d3dy5nb29nbGUuY28udWsv

base64_decode它会在后面的动作中变换

dXJsaHR0cDovL3d3dy5nb29nbGUuY28udWsv

进入

urlhttp://www.google.co.uk/