htmlspecialchars()期望参数1为字符串

时间:2016-12-30 14:39:52

标签: php jquery

案例:

input_name = Abu 
input_address = Earth
hobbies[0] = read
hobbies[1] = sport
hobbies[2] = eat

预期成果: 的阿布 - 地球 - 读运动吃

但结果:

  

警告:htmlspecialchars()要求参数1为字符串,数组   在第6行的/opt/lampp/htdocs/tester/listen.php中给出

     

阿布地球 -

     

注意:未初始化的字符串偏移量:0英寸   第16行的/opt/lampp/htdocs/tester/listen.php

     

注意:未初始化的字符串偏移量:1英寸   第17行的/opt/lampp/htdocs/tester/listen.php

     

注意:未初始化的字符串偏移量:2英寸   第18行/opt/lampp/htdocs/tester/listen.php

如何解决这个问题? 这是我的代码

的index.php

<script src="https://code.jquery.com/jquery-3.1.1.min.js" charset="utf-8"></script>
<script src="http://cdn.jsdelivr.net/jquery.validation/1.15.1/jquery.validate.min.js" charset="utf-8"></script>

<form method="post" id="frm_test" name="frm_test">
  <input type="text" name="input_name" value="" required>
  <input type="text" name="input_address" value="" required>
  <input type="text" name="hobbies[0]" value="">
  <input type="text" name="hobbies[1]" value="">
  <input type="text" name="hobbies[2]" value="">
  <button type="submit">Submit Data</button>
</form>

<script type="text/javascript">
  $(function(){
    $('#frm_test').validate({
            submitHandler: function() {
        postData("frm_test","");
            }
        }
        );
  });

  function postData(frm, id){
    $.post("listen.php",$("#"+frm).serialize(),function(r){
      console.log(r);
    });
  }
</script>

listen.php

<?php
  function filterText($string)
  {
    $conn = mysqli_connect("localhost","root","","dbname");
    $filter = mysqli_real_escape_string($conn, stripslashes(strip_tags(htmlspecialchars($string,ENT_QUOTES))));
    return $filter;
  }

  foreach($_POST as $key=>$value){
    ${$key} = filterText($value);
  }

  echo $input_name."-";
  echo $input_address."-";
  echo $hobbies[0]."-";
  echo $hobbies[1]."-";
  echo $hobbies[2]."-";
 ?>

1 个答案:

答案 0 :(得分:1)

您的hobbies输入字段是一个数组。修改$_POST的迭代,以便它优雅地智能地处理数组:

foreach($_POST as $key => $value){
    ${$key} = is_array($value) ? array_map("filterText", $value) : filterText($value);
}