防止 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/
我正在使用 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/