使用Ajax丢失PHP字符串中的前导0(s)

时间:2017-04-03 16:11:56

标签: php jquery ajax string

我有一个PHP fileName变量,我试图使用Ajax传递给另一个test.php文件。让我们说test文件简单地回应传递给它的PHP变量。这是给我带来问题的代码:

like.php:

        $(".samp").on("click", ".like", function(){
            $.ajax({
               type: "POST",
               url: "test.php",
               data: {favorite : '.$fileName.'},
               success: function(data) {
                   $("p.disp").text(data);
                    $("#liker").attr("class","unlike");
                    $("#icon").attr("class","fa fa-heart fa-lg");
               }
           });
        });


test.php:
<?php
    if(isset($_POST['favorite']))
      {
        $fileName = $_POST['favorite'];
        echo $fileName;
      }
?>

在我的PHP程序中,我发现gettype($fileName)是字符串并将其回显为&#39; 01923&#39;在我的Ajax调用之前。但是在Ajax调用之后,test.php中的echo语句显示的字符串是&#39; 1923&#39;。为什么我会失去领先的0?我也检查了gettype($_POST['favorite'])中的test.php字符串。但不知何故,当它被传递给test.php时,它会失去0。为什么会发生这种情况?如何防止它?

P.S-我想保持字符串不变。我不想在test.php中附加0,因为我不知道每个fileName的前导零数。

3 个答案:

答案 0 :(得分:3)

使用php,最好在输出html,javascript和css等时关闭php标签并打开一个新标签。

这样做:

<?php
  $somephpcode = do_things();
?>
<p> Now we output html </p>
<script>
  // Now we output javascript
  // and do some ajax with interpolation like:
  // data: {favorite : "<?php echo $fileName;?>"}
</script>

而不是这样:

<?php
  $somephpcode = do_things();
  echo '<p> Now we output html </p>
  <script>
    // Now we output javascript
    // and do some ajax with interpolation like:
    // data: {favorite : '.$fileName.'}
  </script>';
?>

对于后一种情况,你必须在输出的字符串周围包装另一个引号,这可能会造成混淆。

答案 1 :(得分:1)

使用PHP生成HTML(以及在本例中为JavaScript)时,请始终查看渲染结果。

在这里,您应该看到最终:

// ...
data: {favorite: 01923},
// ...

我希望你能清楚地看到,这是数字,因此会被修剪为1923

如果要将PHP中的值注入JavaScript,则应使用json_encode。具体地说...

data: {favorite: '.json_encode($fileName).'}

这也将处理之前可能是注入漏洞的任何事情,为您提供可由JavaScript可靠读取的值。这适用于字符串,数字,布尔值,甚至数组和对象(有一些小问题)

答案 2 :(得分:1)

更改行:

data: {favorite : '.$fileName.'},

用这个:

data: {favorite : "'.$fileName.'"},

请注意文件名前后的双引号。

问题是如果没有引号,代码会生成:

data: {favorite : 01923},

被解释为整数,因此0丢失。

使用引号时,输出为:

data: {favorite : "01923"},

被视为字符串,0不会丢失。