2015-12-11 100 views
3

我正在开发使用CakePHP 2.6的应用程序,并用使含有URL的字符作为一个参数的字符串通过到一个控制器的方法具有的问题。阻止CakePHP从作为参数传递的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按钮在传递信息的“deletelink”动作控制器的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是第三参数。

我试图包裹内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

是否要传递3个参数ters到'deletelink'行动?你的删除动作是怎样的? – skywalker

+0

@skywalker是的,我想所有的3个参数传递给'deletelink'行动。这个概念是用第三个参数来做东西,然后使用前两个参数重定向到另一个动作。我已更新我的原始文章,以包含'deletelink'控制器代码。 – Daniel

+0

你尝试[这](http://stackoverflow.com/questions/4750989/passing-an-urlencoded-url-as-parameter-to-a-controller-action-at-cakephp)? – skywalker

回答

1

CakePHP的(或mod_rewrite的,我会说)是越来越糊涂与形成的URL的方式。

你最安全的选择是base64_encode在视图中url参数,这将导致类似于电话:

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

base64_decode它后面的动作,这将改变

dXJsaHR0cDovL3d3dy5nb29nbGUuY28udWsv 

进入

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