我们有这个代码:
$value = preg_replace("/[^\w]/", '', $value);
其中$value
在utf-8中。在此转换之后,将删除多字节字符的第一个字节。如何完全覆盖UTF-8字符?
抱歉,我的PHP不是很好
答案 0 :(得分:6)
此修饰符打开与Perl不兼容的PCRE的其他功能。模式字符串被视为UTF-8。此修饰符可从Unix上的PHP 4.1.0或更高版本以及win32上的PHP 4.2.3获得。自PHP 4.3.5起,检查模式的UTF-8有效性。
如果不这样做,请尝试
mb_ereg_replace
- 用多字节支持替换正则表达式代替。
答案 1 :(得分:4)
有这个令人讨厌的u
modifier to pcre patterns in PHP。它声明正则表达式是用UTF8编码的,但我发现它也将输入视为UTF8。
答案 2 :(得分:2)
将u
附加到正则表达式,以打开PCRE的多字节unicode模式:
$value = preg_replace("/[^\w]/u", '', $value);
在unicode模式下,PCRE希望所有内容都是多字节的,如果不是,那么 会遇到最后期限的问题。因此,要将任何内容转换为UTF-8(并丢弃任何不可转换的垃圾),我们首先使用:
$value = iconv( 'ISO-8859-1', 'UTF-8//IGNORE//TRANSLIT', $i );
清理并准备输入。
因为所有内容都可以编码成ISO-8859-1(即使一些不起眼的字符显示不正确),并且由于大多数Web浏览器在8859中本地运行(除非被告知使用UTF-8),我们发现此功能为一种安全,有效的方法来“拿走任何东西,丢弃任何垃圾,然后转换成UTF-8”。
mb_ereg_ *自5.3.0起已弃用 - 因此使用这些功能不是正确的方法。
答案 3 :(得分:1)
尝试使用此功能...... http://php.net/manual/en/function.mb-ereg-replace.php
答案 4 :(得分:0)
使用[^\w]+
代替[^\w]
您也可以使用\W
代替[^\w]