我正在应用以下功能
<?php
function replaceChar($string){
$new_string = preg_replace("/[^a-zA-Z0-9\sçéèêëñòóôõöàáâäåìíîïùúûüýÿ]/", "", $string);
return $new_string;
}
$string = "This is some text and numbers 12345 and symbols !£%^#&$ and foreign letters éèêëñòóôõöàáâäåìíîïùúûüýÿ";
echo replaceChar($string);
?>
哪个工作正常,但如果我在preg_replace中添加ã,如
$new_string = preg_replace("/[^a-zA-Z0-9\sçéèêëñòóôõöàáâãäåìíîïùúûüýÿ]/", "", $string);
$string = "This is some text and numbers 12345 and symbols !£%^#&$ and foreign letters éèêëñòóôõöàáâäåìíîïùúûüýÿã";
它与英镑符号冲突,并用黑色方块中的未识别问号替换英镑符号。
这不重要但有人知道为什么会这样吗?
谢谢,
百里
更新:谢谢大家。更改了添加u修饰符的函数:pt2.php.net/manual/en / ... - 按照Artefacto的建议并进行处理
function replaceChar($string){
$new_string = preg_replace("/[^a-zA-Z0-9\sçéèêëñòóôõøöàáâãäåìíîïùúûüýÿ]/u", "", $string);
return $new_string;
}
答案 0 :(得分:4)
如果您的字符串是UTF-8,则必须将u
修饰符添加到正则表达式。像这样:
function replaceChar($string){
$new_string = preg_replace("/[^a-zA-Z0-9\sçéèêëñòóôõöàáâäåìíîïùúûüýÿ]/u", "", $string);
return $new_string;
}
$string = "This is some text and numbers 12345 and symbols !£%^#&$ and foreign letters éèêëñòóôõöàáâäåìíîïùúûüýÿ";
echo replaceChar($string);
答案 1 :(得分:2)
有可能你的字符串是UTF-8,但是preg_replace()正在处理字节
答案 2 :(得分:0)
该代码有效......
也许你应该尝试中欧字符编码
<?php
header ('Content-type: text/html; charset=ISO-8859-2');
?>
答案 3 :(得分:0)
您可能需要查看mb_ereg_replace()。正如Mark所说,preg_replace仅适用于字节级别,并且不适用于多字节字符编码。
干杯,
费边