我有一个名为:index.php的文件,其中我有一个表单,在该表单中我有一个ajax代码,我在其中调用PHP文件。这个外部PHP文件将生成隐藏的输入字段,稍后将其附加到我的表单中。
这是ajax代码:
$urlforXmltoHtml = "xmltohtml.php";
$.get($urlforXmltoHtml,
{ uniquekey: Reference },
function (data) {
$("#Data").append(data);
$('#msform').submit();
});
这是index.php中的div,其中生成的隐藏字段将附加到:
<div id="Data">
</div>
在xmltohtml.php中我得到了这个:
<?php
session_start();
$xml="";
//gebruik uniquekey van cops.php
$uniquekey = $_GET['uniquekey'];
if (file_exists('downloads/'.$uniquekey.'.xml')) {
$xml = simplexml_load_file('downloads/'.$uniquekey.'.xml');
foreach( $xml as $headItems )
{
foreach($headItems as $item){
$_SESSION['count'] = $_SESSION['count'] + 1;
$count = $_SESSION['count'];
echo '<div style="display:none;">';
//preg replaces successive space characters
$description = preg_replace('/\s+/', ' ', $item->->Description);
//encoding http://php.net/manual/en/function.htmlentities.php
echo '<input type="hidden" name="DESCRIPTION['.$count.']" value="'. htmlspecialchars($description, ENT_QUOTES) .'">';
echo '<input type="hidden" name="-QUANTITY['.$count.']" value="'. htmlspecialchars($item->Quantity,ENT_QUOTES) .'">';
echo '</div>';
}
}
} else {
exit('Failed to open xml.' . $uniquekey);
}
?>
但现在作为输入,当我得到一个$ description例如witth item&amp;然后,如果我复制粘贴来自chrome的元素检查器的html代码,我看到它将被更改为项目$ amp;实际上,当我发布时,我只想发布项目&amp;而不是item&
。
我知道如何更改此内容以便发送&
而非&
,还是只发送&
?
答案 0 :(得分:4)
您不应该通过将网址参数连接到网址来发送网址参数,而是将其作为data
参数发送到jQuery&#39; $.get
:
$urlforXmltoHtml = "xmltohtml.php";
$.get($urlforXmltoHtml,
{ uniquekey: Reference },
function (data) {
$("#Data").append(data);
$('#msform').submit();
});
另一方面,你在这里做的是非常危险:
$uniquekey = $_GET['uniquekey'];
if (file_exists('downloads/'.$uniquekey.'.xml')) {
$xml = simplexml_load_file('downloads/'.$uniquekey.'.xml');
从不信任来自客户的输入!在这种情况下,您应该将一组密钥列入白名单,并仅使用这些密钥来检索/操作服务器上的文件。
答案 1 :(得分:0)
在PHP上使用urldecode(): http://php.net/manual/pt_BR/function.urldecode.php
或Javascript上的decodeURIComponent(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent