// Remove all characters that are not the separator, a-z, 0-9, or whitespace
$string = preg_replace('![^'.preg_quote('-').'a-z0-_9\s]+!', '', strtolower($string));
// Replace all separator characters and whitespace by a single separator
$string = preg_replace('!['.preg_quote('-').'\s]+!u', '-', $string);
9条答案
按热度按时间eqzww0vc1#
正则表达式替换是最好的选择,使用
$str
作为示例字符串,并使用:print:
匹配它,:print:
是POSIX Character Class::print:
所做的是查找所有可打印的字符。相反,:^print:
查找所有不可打印的字符。任何不属于当前字符集的字符都将被删除。**注意:**在使用这个方法之前,你必须确保你的当前字符集是ASCII。POSIX字符类支持ASCII和Unicode,并且只根据当前字符集匹配。从PHP 5.6开始,默认字符集是UTF-8。
ih99xse12#
你只想要ASCII printable characters?
使用此:
或者更好的方法是,将输入转换为utf8,然后使用phputf8 lib将“not normal”字符转换为它们的ascii表示:
368yc8dk3#
$clearstring=filter_var($rawstring, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
更新日期:
自PHP 8.1起不建议使用
FILTER_SANITIZE_STRING
https://www.php.net/manual/en/migration81.deprecated.php#migration81.deprecated.filterc9x0cxw04#
与此相关的是,我们有一个Web应用程序,它必须将数据发送到一个只能处理ASCII字符集前128个字符的遗留系统。
我们必须使用的解决方案是将尽可能多的字符“翻译”成紧密匹配的ASCII等价物,但留下任何不能翻译的内容。
通常我会这样做:
......但它会替换所有不能翻译成问号(?)的内容。
所以我们最后做了以下工作:在这个函数的末尾检查(注解掉)php正则表达式,它只是去掉了非ASCII字符。
csbfibhn5#
我还认为最好的解决方案可能是使用正则表达式。
我的建议是:
然后,您可以像这样使用它:
显示:
kx5bkwkv6#
我只需要加上标题
q8l4jmvw7#
这应该是非常直接的,不需要iconv函数:
gdrx4gfi8#
我的问题解决了
vybvopom9#
我认为最好的方法是使用ord()命令。这样你就可以保存任何语言的字符。只要记住先测试你文本的ord结果。这在unicode上不起作用。