Javascript 更改帖子内容

Javascript 更改帖子内容,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个名为:index.php的文件,其中有一个表单,在该表单中我得到了ajax代码,在该代码中我调用了一个php文件。这个外部PHP文件将生成隐藏的输入字段,这些字段稍后将附加到我的表单中 这是ajax代码: $urlforXmltoHtml = "xmltohtml.php"; $.get($urlforXmltoHtml, { uniquekey: Reference }, function (data) { $("#Data").append(data); $(

我有一个名为: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&然后如果我从out chrome的元素检查器复制粘贴html代码,我看到它将被更改为$amp;实际上,当我发布时,我只想发布项目&而不是
item&


你知道我如何改变它,使它发送
&
而不是
&
,还是只发送
&

您不应该通过将URL参数连接到URL来发送URL参数,而是通过将它们作为
数据
参数发送到jQuery的
$。获取

$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');
绝不信任客户的输入!在这种情况下,您应该将一组密钥列为白名单,并仅使用这些密钥检索/操作服务器上的文件。

在PHP上使用urldecode():

或Javascript上的decodeURIComponent():

您不能只使用正则表达式来识别&;并替换为&?W3validator建议发送
&
,只是说你能给我发一个关于这个描述的链接吗?谢谢,请在问题中提供您的所有代码,而不是作为一个粘贴箱(这些代码可能会消失,然后问题变得无用)。谢谢。谢谢Marcel提供的有用信息,但当生成输入字段时,我会将其视为输入值,例如value=“item1&item2”如果我从chrome inspector复制并将其粘贴到记事本中,那么我会得到:value=“item1&;item2”如果我发布此信息,接收方将在上收到一个错误,因此我认为他们会收到$amp@b正确的做法是将符号和编码为
&将它们作为URL参数的一部分发送时。服务器将正确解码。@bboni您在输出html时使用的是
html\u实体解码(“test1&;test2”)
。将变量输出到表单时,请使用
htmlspecialchars
,如
htmlspecialchars(“test1&test2”)
(还有
count
变量)。在输出一些文本时始终使用正确的编码函数。是的,我已经使用了该函数,正如我所看到的,这是我的PHP的旧上载,谢谢:)因此,如果您执行表单POST,所有字符(如-)都将正确编码,并像$amp;一样发送;哪一种方法正确?@bboni是的,当执行正常形式的post(不使用JavaScript)时,字符总是正确编码的。当使用jQuery的AJAX方法并正确使用我所描述的
数据
参数时,URL参数将正确编码。在服务器端应该不需要使用像
urldecode
这样的帮助函数,除非您使用了错误的方法。