Специальные символы (т. Е. Символ «…»), приводящие к сбою запроса

Я не уверен, к какому набору символов относится этот символ «…». Однако в некоторых случаях пользователи копируют и вставляют данные в поле примечания приложения, над которым я работаю. Содержимое заметки содержит эти специальные символы и вызывает сбой запроса вставки / обновления.

Мне было интересно, есть ли строковая функция для обнаружения и удаления этого специального символа (наряду с другими нежелательными символами из этого набора символов) при сохранении всех других специальных символов?

Пример:

$query = 'INSERT INTO notes (note) VALUES ("… hello … world!")';
mysqli_query($conn, $query); //nothing is inserted

Заранее спасибо!

0

Решение

На вашем месте я бы хотел принять более широкий набор символов. (Вам просто нужно помнить, чтобы экранировать символы должным образом.) Удаление определенных символов просто не удобно для пользователя, а использование UTF-8 кажется ограниченным.

Если вы действительно хотите удалить символы UTF-8, вы можете использовать

$string = preg_replace('/[^(\x19-\x7F)]*/','', $string);

как описано Вот.


Вот пример:

<?php
$string = "a bc…de f";
echo preg_replace('/[^(\x19-\x7F)]*/','', $string);
?>

Выход:

a bcde f

Наконец, вам нужно избежать ввода:

$string = preg_replace('/[^(\x19-\x7F)]*/','', $string);
$string = mysqli_escape_string($string);
$query = 'INSERT INTO notes (note) VALUES (' . $string . ')';
mysqli_query($conn, $query);
1

Другие решения

Прежде чем решить вашу проблему, вы не должны вставлять необработанные данные в вашу базу данных.

Что вы должны сделать, это:

error_reporting(E_ALL);
$string = mysqli_escape_string($conn, "… hello … world!");
mysqli_query($conn, $query);

error_reporting покажет вам необработанные ошибки на экране, а экранирование строки:

а) Избегайте инъекций SQL.

б) Вставьте запись, даже если она имеет специальные символы.

Теперь, если вам нужно удалить эти специальные символы, используйте что-то вроде:

$string = preg_replace($pattern, "", $string);

прежде чем убежать от него.

0

По вопросам рекламы [email protected]