Как удалить одинарные и двойные кавычки из строки

когда я запускаю фразу, содержащую двойные кавычки через эту функцию, она заменяет кавычки 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) должен быть преобразован в "quot". Вы можете рассмотреть замену &quote С код 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;
}