Jak mogę preg_replace znak specjalny, taki jak „Prêt-à-porter”?
Na tym forum i ogólnie w Internecie jest mnóstwo Qs na ten temat. Ale nie tylko to rozumiem.
Oto mój kod:
function updateGuideKeywords($dal)
{
$pattern = "/[^a-zA-Z-êàé]/";
$keywords = preg_replace($pattern, '', $_POST['keywords']);
echo json_encode($keywords);
}
Teraz wejście jestPrêt-à-porter
, a wyjście jest"Pr\u00eat-\u00e0-porter"
.
Dlaczego dostaję „0000”?
I jak mogę zmienić mój wzór, aby uwzględnić postacieê
, à
ié
?
EDYTOWAĆ
humm ... ponieważ wygląda na problem z Unicode / znaków, mogę pójść na rozwiązanie, które znalazłemta strona.
Tutaj sugerują wykonanie czegoś takiego:
$chain="prêt-à-porter";
$pattern = array("'é'", "'è'", "'ë'", "'ê'", "'É'", "'È'", "'Ë'", "'Ê'", "'á'", "'à'", "'ä'", "'â'", "'å'", "'Á'", "'À'", "'Ä'", "'Â'", "'Å'", "'ó'", "'ò'", "'ö'", "'ô'", "'Ó'", "'Ò'", "'Ö'", "'Ô'", "'í'", "'ì'", "'ï'", "'î'", "'Í'", "'Ì'", "'Ï'", "'Î'", "'ú'", "'ù'", "'ü'", "'û'", "'Ú'", "'Ù'", "'Ü'", "'Û'", "'ý'", "'ÿ'", "'Ý'", "'ø'", "'Ø'", "'œ'", "'Œ'", "'Æ'", "'ç'", "'Ç'");
$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');
$chain = preg_replace($pattern, $replace, $chain);
EDYCJA 2
To jest moje rozwiązanie do tej pory:
function updateGuideKeywords()
{
//First we replace characters with accents
$pattern = array("'é'", "'è'", "'ë'", "'ê'", "'É'", "'È'", "'Ë'", "'Ê'", "'á'", "'à'", "'ä'", "'â'", "'å'", "'Á'", "'À'", "'Ä'", "'Â'", "'Å'", "'ó'", "'ò'", "'ö'", "'ô'", "'Ó'", "'Ò'", "'Ö'", "'Ô'", "'í'", "'ì'", "'ï'", "'î'", "'Í'", "'Ì'", "'Ï'", "'Î'", "'ú'", "'ù'", "'ü'", "'û'", "'Ú'", "'Ù'", "'Ü'", "'Û'", "'ý'", "'ÿ'", "'Ý'", "'ø'", "'Ø'", "'œ'", "'Œ'", "'Æ'", "'ç'", "'Ç'");
$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'];
$keywords = preg_replace($pattern, $replace, $_POST['keywords']);
//Then we remove unwanted characters by only allowing a-z, A-Z, comma, 'minus' and white space
$keywords = preg_replace("/[^a-zA-Z-,\s]/", "", $keywords);
echo json_encode($keywords);
}