如何 preg_replace 特殊字符,如“Prêt-à-porter”?

Ste*_*ven 2 php preg-replace

在这个论坛和网络上有很多关于这个问题的问题。\n但我不明白。

\n\n

这是我的代码:

\n\n
function updateGuideKeywords($dal)\n{\n    $pattern = "/[^a-zA-Z-\xc3\xaa\xc3\xa0\xc3\xa9]/";\n    $keywords = preg_replace($pattern, \'\', $_POST[\'keywords\']);\n    echo json_encode($keywords);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,输入是Pr\xc3\xaat-\xc3\xa0-porter,输出是"Pr\\u00eat-\\u00e0-porter"

\n\n

为什么我会得到 \'\\u00e\' ?

\n\n

我怎样才能改变我的模式以包含这些字符\xc3\xaa\xc3\xa0以及\xc3\xa9

\n\n

编辑
\nhumm...因为它看起来像unicode/字符问题,我可能会寻求我在本页上找到的解决方案找到的解决方案。

\n\n

在这里他们建议这样做:

\n\n
$chain="pr\xc3\xaat-\xc3\xa0-porter";\n\n$pattern = array("\'\xc3\xa9\'", "\'\xc3\xa8\'", "\'\xc3\xab\'", "\'\xc3\xaa\'", "\'\xc3\x89\'", "\'\xc3\x88\'", "\'\xc3\x8b\'", "\'\xc3\x8a\'", "\'\xc3\xa1\'", "\'\xc3\xa0\'", "\'\xc3\xa4\'", "\'\xc3\xa2\'", "\'\xc3\xa5\'", "\'\xc3\x81\'", "\'\xc3\x80\'", "\'\xc3\x84\'", "\'\xc3\x82\'", "\'\xc3\x85\'", "\'\xc3\xb3\'", "\'\xc3\xb2\'", "\'\xc3\xb6\'", "\'\xc3\xb4\'", "\'\xc3\x93\'", "\'\xc3\x92\'", "\'\xc3\x96\'", "\'\xc3\x94\'", "\'\xc3\xad\'", "\'\xc3\xac\'", "\'\xc3\xaf\'", "\'\xc3\xae\'", "\'\xc3\x8d\'", "\'\xc3\x8c\'", "\'\xc3\x8f\'", "\'\xc3\x8e\'", "\'\xc3\xba\'", "\'\xc3\xb9\'", "\'\xc3\xbc\'", "\'\xc3\xbb\'", "\'\xc3\x9a\'", "\'\xc3\x99\'", "\'\xc3\x9c\'", "\'\xc3\x9b\'", "\'\xc3\xbd\'", "\'\xc3\xbf\'", "\'\xc3\x9d\'", "\'\xc3\xb8\'", "\'\xc3\x98\'", "\'\xc5\x93\'", "\'\xc5\x92\'", "\'\xc3\x86\'", "\'\xc3\xa7\'", "\'\xc3\x87\'");\n\n$replace = array(\'e\', \'e\', \'e\', \'e\', \'E\', \'E\', \'E\', \'E\', \'a\', \'a\', \'a\', \'a\', \'a\', \'A\', \'A\', \'A\', \'A\', \'A\', \'o\', \'o\', \'o\', \'o\', \'O\', \'O\', \'O\', \'O\', \'i\', \'i\', \'i\', \'I\', \'I\', \'I\', \'I\', \'I\', \'u\', \'u\', \'u\', \'u\', \'U\', \'U\', \'U\', \'U\', \'y\', \'y\', \'Y\', \'o\', \'O\', \'a\', \'A\', \'A\', \'c\', \'C\'); \n\n$chain = preg_replace($pattern, $replace, $chain);\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑2
\n这是我到目前为止的解决方案:

\n\n
function updateGuideKeywords()\n{\n    //First we replace characters with accents\n    $pattern = array("\'\xc3\xa9\'", "\'\xc3\xa8\'", "\'\xc3\xab\'", "\'\xc3\xaa\'", "\'\xc3\x89\'", "\'\xc3\x88\'", "\'\xc3\x8b\'", "\'\xc3\x8a\'", "\'\xc3\xa1\'", "\'\xc3\xa0\'", "\'\xc3\xa4\'", "\'\xc3\xa2\'", "\'\xc3\xa5\'", "\'\xc3\x81\'", "\'\xc3\x80\'", "\'\xc3\x84\'", "\'\xc3\x82\'", "\'\xc3\x85\'", "\'\xc3\xb3\'", "\'\xc3\xb2\'", "\'\xc3\xb6\'", "\'\xc3\xb4\'", "\'\xc3\x93\'", "\'\xc3\x92\'", "\'\xc3\x96\'", "\'\xc3\x94\'", "\'\xc3\xad\'", "\'\xc3\xac\'", "\'\xc3\xaf\'", "\'\xc3\xae\'", "\'\xc3\x8d\'", "\'\xc3\x8c\'", "\'\xc3\x8f\'", "\'\xc3\x8e\'", "\'\xc3\xba\'", "\'\xc3\xb9\'", "\'\xc3\xbc\'", "\'\xc3\xbb\'", "\'\xc3\x9a\'", "\'\xc3\x99\'", "\'\xc3\x9c\'", "\'\xc3\x9b\'", "\'\xc3\xbd\'", "\'\xc3\xbf\'", "\'\xc3\x9d\'", "\'\xc3\xb8\'", "\'\xc3\x98\'", "\'\xc5\x93\'", "\'\xc5\x92\'", "\'\xc3\x86\'", "\'\xc3\xa7\'", "\'\xc3\x87\'");\n    $replace = array(\'e\', \'e\', \'e\', \'e\', \'E\', \'E\', \'E\', \'E\', \'a\', \'a\', \'a\', \'a\', \'a\', \'A\', \'A\', \'A\', \'A\', \'A\', \'o\', \'o\', \'o\', \'o\', \'O\', \'O\', \'O\', \'O\', \'i\', \'i\', \'i\', \'I\', \'I\', \'I\', \'I\', \'I\', \'u\', \'u\', \'u\', \'u\', \'U\', \'U\', \'U\', \'U\', \'y\', \'y\', \'Y\', \'o\', \'O\', \'a\', \'A\', \'A\', \'c\', \'C\');        $shguideID = $_POST[\'shguideID\'];\n    $keywords = preg_replace($pattern, $replace, $_POST[\'keywords\']);\n    //Then we remove unwanted characters by only allowing a-z, A-Z, comma, \'minus\' and white space\n    $keywords = preg_replace("/[^a-zA-Z-,\\s]/", "", $keywords);\n\n    echo json_encode($keywords);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Fra*_*mer 5

如果要将 \'\xc3\xa9\' 替换为 \'e\' 等,请使用带有 //TRANSLIT 修饰符的iconv()

\n\n

例如,

\n\n
$newString = iconv(\'UTF-8\', \'ASCII//TRANSLIT\', $myString);\n
Run Code Online (Sandbox Code Playgroud)\n\n

一个更完整的例子:

\n\n
$ cat scratch.php\n<?php\n$x = "Pr\xc3\xaat-\xc3\xa0-porter";\nvar_dump(json_encode(iconv("UTF-8", "ASCII//TRANSLIT", $x)));\n\n\n$ php scratch.php\nstring(15) ""Pret-a-porter""\n$ \n
Run Code Online (Sandbox Code Playgroud)\n