3

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

在我看来,我有一段代码回显出一系列包含数据的表行,并通过页面 id、单元 id 和有时可以包含 url 的链接的 id。

<?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按钮将信息传递给控制器​​中的“删除链接”操作时,URL 如下所示:

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

这表明 url 已作为字符串传递,但是在操作中,当我尝试仅var_dump()第三个参数时,它返回一个字符串,www.google.co.uk仅此而已,这阻止我substr()调用参数以检查前 3 个字符是否是否相等url

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

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

有谁知道通过这样的参数而不丢失重要字符的成功方法?

更新 1:删除链接操作

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'));
    }
}
4

1 回答 1

1

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

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

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

稍后在动作中,base64_decode这将改变

dXJsaHR0cDovL3d3dy5nb29nbGUuY28udWsv

进入

urlhttp://www.google.co.uk/
于 2015-12-11T12:38:04.563 回答