Как удалить одинарные и двойные кавычки из строки
когда я запускаю фразу, содержащую двойные кавычки через эту функцию, она заменяет кавычки quot.
Я хочу полностью удалить их (также одинарные кавычки). Как я могу изменить функцию, чтобы сделать это?
function string_sanitize($s) {
$result = preg_replace("/[^a-zA-Z0-9]+/", "", $s);
return $result;
}
обновление:
Example 1: This is 'the' first example
returns: Thisis030the039firstexample
Errors: Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '0' in C
Example 2: This is my "second" example
returns: Thisismyquotsecondquotexample
Errors: Invalid express in Xpath
5 ответов
похоже, что ваша исходная строка имела HTML-символы для "
("
) поэтому, когда вы пытаетесь санировать его, вы просто удаляете &
и ;
, оставляя остальную часть строки quot
.
---редактировать---
вероятно, самый простой способ удалить не альфа-цифровые символы - это декодировать символы HTML с помощью html_entity_decode, затем запустите его через регулярное выражение. Так как в этом случае вы ничего не получите это нужно перекодировать, вам не нужно делать htmlentities, но стоит помнить, что вы had HTML-данные, и теперь у вас есть raw unencoded данные.
например:
function string_sanitize($s) {
$result = preg_replace("/[^a-zA-Z0-9]+/", "", html_entity_decode($s, ENT_QUOTES));
return $result;
}
отметим, что ENT_QUOTES
флаги функции "...конвертировать как двойные, так и одинарные кавычки.".
Я бы не назвал эту функцию string_sanitize()
, так как это вводит в заблуждение. Вы могли бы назвать это strip_non_alphanumeric()
.
ваша текущая функция будет удалять все, что не является верхней или строчной буквой или числом.
вы можете раздеться просто '
и "
С...
$str = str_replace(array('\'', '"'), '', $str);
Я думаю, что ваш человек должен быть такой:
$result = preg_replace("/[^a-zA-Z0-9]+/", "", html_entity_decode($s));
см. html_entity_decode reference для получения более подробной информации.
ваша функция использует регулярное выражение для удаления любого символа, отличного от [a-zA-Z0-9], поэтому она наверняка удаляет любые "" или "
EDIT: ну, из ответа Хэмиша я понимаю, что ваша строка является строкой HTML, так что она объясняет, почему "(") должен быть преобразован в "quot". Вы можете рассмотреть замену "e
С код preg_replace, или htmlspecialchars_decode первый.
чтобы быть уверенным в удалении всех видов кавычек (включая те, в которых левая сторона отличается от правой стороны), я думаю, что это должно быть что-то вроде;
function string_sanitize($s) {
$result = htmlentities($s);
$result = preg_replace('/^(")(.*)(")$/', "", $result);
$result = preg_replace('/^(«)(.*)(»)$/', "", $result);
$result = preg_replace('/^(“)(.*)(”)$/', "", $result);
$result = preg_replace('/^(')(.*)(')$/', "", $result);
$result = html_entity_decode($result);
return $result;
}