1

我在 Magento 中遇到了一个看似错误的问题,但我希望比我更聪明的人能解释一下。

在 VoteController.php 中,函数addAction调用_redirectReferer它的最后一行。这样做的目的是在 Magento 投票后将用户重定向回原始页面。

_redirectReferercall _getRefererUrl,它从几个地方获取引用 url。此函数所做的最后一件事是调用escapeUrlURL 字符串。 escapeUrlhtmlspecialchars.

结果是一个类似于example.com/?a=b&c=d变成的 URL example.com/?a=b&c=d(注意损坏的 & 符号)。

在 URL 上调用 htmlspecialchars 的目的是什么?


资源

addAction:/app/code/core/Mage/Poll/controllers/VoteController.php
_redirectReferer_getRefererUrl:/app/code/core/Mage/Core/Controller/Varien/Action.php
escapeUrl:/app/code/core/Mage/Core/Helper /摘要.php

4

1 回答 1

4

背景: &是和号字符所需的html实体表示;否则浏览器会假定&源代码中的任何内容都是实体表示。参考http://www.w3.org/QA/2005/04/php-session#background

这在呈现 URL 时很好,但在服务器端计算重定向并将其应用于响应对象时并不理想。因此,这是一个错误,也是一个很好的借口来重写core/data帮助程序以以正确的方式逃避这种情况。

任何人都懒得 POC :-) 来设置民意调查:

<?php
include 'app/Mage.php';
Mage::app();

$p = Mage::app()->getRequest()->getParams();

if (empty($p)) {
    $refererUrl = Mage::app()->getRequest()->getServer('HTTP_REFERER').'?foo=bar&baz=bip';
    $refererUrl = Mage::helper('core')->escapeUrl($refererUrl);
    Mage::app()->getResponse()->setRedirect($refererUrl);
    Mage::app()->getResponse()->sendResponse();
    exit;
}

var_dump($p);
于 2012-12-04T23:36:58.077 回答