PHP - проблема кодирования с фильтрованным вводом - PullRequest
0 голосов
/ 06 мая 2018

Я использую функцию PHP filter_input для очистки параметров POST на моем сайте.

Код:

$text = trim(filter_input(INPUT_POST, 'text', FILTER_SANITIZE_STRING,
                 array('flags' => FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH)));

Теперь, если я вставлю такие символы, как "ù", это закодированный результат:

ù (& # 195 & # 185)

Мои таблицы базы данных закодированы в utf8_general_ci. Теперь я попробовал с функцией

utf8_decode($data)

но это не работает. Пожалуйста, помогите, как восстановить символы, закодированные с параметром FILTER_FLAG_ENCODE_HIGH?

РЕДАКТИРОВАТЬ: вот мой класс соединения

 class Connection{

protected $db =null;


public function open()
{
    try {
    $dsn      = "mysql:dbname="x"; host=127.0.0.1;charset=utf8";
    $user     = "user";
    $password = "password";

    $options  = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false,

    );



        $this->db = new PDO($dsn, $user, $password, $options);

        return $this->db;
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
}

public function close()
{
    $this->db = null;
    return true;
}
}

1 Ответ

0 голосов
/ 07 мая 2018

ù - это "Моджибаке" для ù.

См. это о том, что с этим делать.

Не используйте никакие функции, такие как utf8_decode; они только усугубят проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...