11

我正在使用一个函数从字符串中删除特殊字符。

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|"bc!@£de^&$f g');
Will output: abcdef-g

从 SO Answer 参考。问题是如果'是我的字符串中的最后一个字符,就像我America'从excel文件中获取一个字符串,如果我把它放在这个函数中,它不会转义'。当第一个和最后一个字符是'

4

4 回答 4

15

尝试替换常规的期望变化

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

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

或者

你可以str_replacepreg_replace()更快更容易, 因为它不使用正则表达式。

$text = str_replace("'", '', $string);
于 2013-10-22T15:17:27.797 回答
6

以上述示例的更详细方式,考虑以下是您的字符串:

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

代码:

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

Allows:英文字母(大写和小写)、0 到 9 和字符!@#$%^&*().

Removes:所有 html 标签和除上述以外的特殊字符

于 2013-12-24T12:47:48.573 回答
0

乍一看,我认为 addlashes 函数可能是一个起点。http://php.net/manual/en/function.addslashes.php

于 2013-10-22T15:26:36.230 回答
0

绝对是一个更好的模式,但这应该适用于整个字符串:

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

如果您需要在字符串中的单词周围替换它们,则必须使用 \b 作为单词边界。此外,如果您想在开头或结尾替换倍数,则需要在其中添加一个 +。

于 2013-10-22T15:38:20.520 回答