我正在使用CakePHP 2.6开发一个应用程序,并将包含url字符的字符串作为参数传递给控制器方法。
在我看来,我有一大堆代码回显了一系列包含数据的表行,并传递了页面ID,单元ID和链接的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
按钮将信息传递给&#39; deletelink&#39;控制器中的动作如下所示:
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
。
我试图将参数包装在serialize()
和urlencode()
内的postlink调用中,但两者都没有达到返回完整字符串所需的效果
urlhttp%3A%2F%2Fwww.google.co.uk%2F
有没有人知道在不丢失重要字符的情况下通过这样的参数的成功方法?
更新1:Deletelink操作
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'));
}
}
答案 0 :(得分:1)
CakePHP(或者我想说的是mod_rewrite)与你的网址形成方式相混淆。
您最安全的选择是base64_encode
视图中的url
参数,这将导致类似于以下的调用:
http://mydomainname.com/webpages/deletelink/239/7/dXJsaHR0cDovL3d3dy5nb29nbGUuY28udWsv
和base64_decode
稍后会在动作中进行转换
dXJsaHR0cDovL3d3dy5nb29nbGUuY28udWsv
进入
urlhttp://www.google.co.uk/