我的消毒$ _POST []功能还可以清理土耳其语字符

时间:2017-03-02 21:26:47

标签: php postgresql utf-8 turkish

我在网上找到了一个功能来清理用户输入数据,并用它来创建$_POST[]方法的替代方法post()。但是,似乎这个函数还清理了UTF-8字符,如ç,ş,ö,ı,İ,Ö,ğ,将它们转换为字符串,如öl。我不知道代码的哪一部分会这样做。

提前致谢。

消毒功能

function post($key) {
    if (isset($_POST[$key])) {
        $data = $_POST[$key];
        if (is_array($data)) {
            foreach ($data as $key => $element) {
                $data[$key] = filter($element);
            }
        } else {
            $data = trim(htmlentities(strip_tags($data)));
            if(get_magic_quotes_gpc())
                $data = stripslashes($data);
            $data = pg_escape_string($data);
        }
    return $data;
    } else {
        return false;
    }
}

2 个答案:

答案 0 :(得分:2)

查看manual我认为你需要在你的htmlentities中添加一些额外的参数,让它知道你使用的是UTF-8编码的字符串。

这是一个可能的解决方案,为了清楚起见,我将相关部分考虑到一个单独的函数中。

function post($key){
  if (isset($_POST[$key])){
    $post = $_POST[$key];

    if (is_array($post)) {
      $data = array();
      foreach ($post as $key => $element) {
        $data[$key] = filter($element);
      }
    } else {
      $data = formatHtmlEntities($post);
    }

    return $data;
  }

  return false;
}

function formatHtmlEntities($data)
{
  $stripTags = strip_tags($data);
  $entityEncodedData = trim(htmlentities($stripTags, ENT_QUOTES, "UTF-8"));

  if (get_magic_quotes_gpc()) {
    $entityEncodedData = stripslashes($entityEncodedData);
  }

  return pg_escape_string($entityEncodedData);
}

答案 1 :(得分:0)

我找到了另一种解决方案,即对我的案例使用htmlspecialchars() vs htmlentities()。参考问题:htmlentities() vs. htmlspecialchars()

相关问题