PHP preg_replace奇怪与英镑符号和ã

时间:2010-05-25 09:54:27

标签: php preg-replace

我正在应用以下功能

<?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;
}

4 个答案:

答案 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仅适用于字节级别,并且不适用于多字节字符编码。

干杯,
费边