Я не уверен, к какому набору символов относится этот символ «…». Однако в некоторых случаях пользователи копируют и вставляют данные в поле примечания приложения, над которым я работаю. Содержимое заметки содержит эти специальные символы и вызывает сбой запроса вставки / обновления.
Мне было интересно, есть ли строковая функция для обнаружения и удаления этого специального символа (наряду с другими нежелательными символами из этого набора символов) при сохранении всех других специальных символов?
Пример:
$query = 'INSERT INTO notes (note) VALUES ("… hello … world!")';
mysqli_query($conn, $query); //nothing is inserted
Заранее спасибо!
На вашем месте я бы хотел принять более широкий набор символов. (Вам просто нужно помнить, чтобы экранировать символы должным образом.) Удаление определенных символов просто не удобно для пользователя, а использование 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);
Прежде чем решить вашу проблему, вы не должны вставлять необработанные данные в вашу базу данных.
Что вы должны сделать, это:
error_reporting(E_ALL);
$string = mysqli_escape_string($conn, "… hello … world!");
mysqli_query($conn, $query);
error_reporting покажет вам необработанные ошибки на экране, а экранирование строки:
а) Избегайте инъекций SQL.
б) Вставьте запись, даже если она имеет специальные символы.
Теперь, если вам нужно удалить эти специальные символы, используйте что-то вроде:
$string = preg_replace($pattern, "", $string);
прежде чем убежать от него.