Удаление специальных символов из строки

Я использую функцию для удаления специального символа из строк.

function clean($string) {
   $string = str_replace('', '-', $string); // Replaces all spaces with hyphens.
   return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
}

И вот тестовый пример

echo clean('a|"[email protected]£de^&$f g');
Will output: abcdef-g

с ссылкой из ответа SO. Проблема в том, что если "является последним символом в моей строке, например, я получаю строку America' из файла excel, если я помещаю ее в эту функцию, она не будет '. Любая помощь, когда первая и последняя символ '

Ответ 1

попытаться заменить регулярное ожидание изменить

preg_replace('/[^A-Za-z0-9\-]/', '', $string);

с

preg_replace("/[^A-Za-z0-9\-\']/", '', $string);  // escape apostraphe

или

вы можете str_replace это быстрее и проще, чем preg_replace() , потому что он не использует регулярные выражения.

$text = str_replace("'", '', $string);

Ответ 2

Более подробно из приведенного выше примера. Ниже рассматривается ваша строка:

$string = '<div>This..</div> <a>is<a/> <strong>hello</strong> <i>world</i> ! هذا هو مرحبا العالم! [email protected]#$%^&&**(*)<>?:";p[]"/.,\|`[email protected]#$%^&^&*(()908978867564564534423412313`1`` "Arabic Text نص عربي test 123 و,.m,............ ~~~ ٍ،]ٍْ}~ِ]ٍ}"; ';

код:

echo preg_replace('/[^A-Za-z0-9 [email protected]#$%^&*().]/u','', strip_tags($string));

Allows: Английские буквы (Столица и малые), от 0 до 9 и символы [email protected]#$%^&*().

Removes: Все теги html и специальные символы, кроме выше

Ответ 4

Определенно лучший образец там, но это должно работать для всей строки:

preg_replace("/^'|[^A-Za-z0-9\'-]|'$/", '', $string);

Если вам нужно заменить их на слова в строке, вам придется использовать \b для границ слов. Кроме того, если вы хотите заменить кратность в начале или в конце, вам нужно добавить + к этим.