0

可能重复:
如何将特殊字符替换为它们在 PHP 中所基于的字符?

我有一个看起来像这样的字符串:

ABCÇĆDEFGHÎIïJ123450086

在 PHP 中,我怎样才能使它显示为:

ABCDEFGHIJ123450086

无需手动替换每个不需要的字符。我可以为此使用某种正则表达式吗?如何?

我只想要 AZ 和 0-9,没有其他外来字符(如删除它们)。

4

5 回答 5

4

使用字符类:

$string = preg_replace('/[^\w\d]/', '', $string);

用空字符串替换所有出现的非 ( [^]) 字母 ( \w) 或数字 ( ) 字符。\d

于 2013-01-10T20:50:31.533 回答
1

一个不错的功能:

/**
 * Strip accents
 *
 * @param string $str string to clean
 * @param string $encoding encoding type (example : utf-8, ISO-8859-1 ...)
 */
function strip_accents($str, $encoding='utf-8') {
    // transforme accents chars in entities
    $str = htmlentities($str, ENT_NOQUOTES, $encoding);

    // replace entities to have the first nice char
    // Example : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ...
    $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);

    // Replace ligatures like : Œ, Æ ...
    // Example "Å“" => "oe"
    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
    // Delete else
    $str = preg_replace('#&[^;]+;#', '', $str);

    return $str;
}

// Example
$texte = 'Ça va mon cœur adoré?';
echo suppr_accents($texte);
// Output : "Ca va mon coeur adore?"

来源: http: //www.infowebmaster.fr/tutoriel/php-enlever-accents

于 2013-01-10T20:57:15.470 回答
0

假设您想删除它们,您可以使用 preg_replace 将所有不在 az、AZ 和 0-9 范围内的字符替换为 '';

否则使用另一个线程中给出的翻译技术。

于 2013-01-10T20:50:22.817 回答
0

您始终可以使用正则表达式。

preg_replace('/^[A-Za-z0-9]/', '', $some_str)

于 2013-01-10T20:50:41.990 回答
0

使用白名单:

$input = 'ABCÇĆDEFGHÎIïJ123450086';
$filtered = preg_replace("~[^a-zA-Z0-9]+~","", $input);
于 2013-01-10T20:51:00.003 回答