£ sterlin imzalamak ve PHP preg_replace gariplik

4 Cevap php

Ben aşağıdaki işlevi uyguluyorum

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

çalışıyor ama hangi ben gibi preg_replace ã eklerseniz

$new_string = preg_replace("/[^a-zA-Z0-9\sçéèêëñòóôõöàáâãäåìíîïùúûüýÿ]/", "", $string);

$string = "This is some text and numbers 12345 and symbols !£%^#&$ and foreign letters éèêëñòóôõöàáâäåìíîïùúûüýÿã";

Bu diyez işareti TL ile çakışan ve siyah meydanında tanımlanamayan soru işareti diyez işareti değiştirir.

Bu kritik değil ama neden bu olduğunu bilen var mı?

Teşekkür ederim,

Barry

GÜNCELLEME: Hepinize teşekkür ederim. Artefacto tarafından önerilen ve bir tedavi çalışır gibi - pt2.php.net/manual/en / ...: u değiştirici ekleyerek değişti fonksiyonları

function replaceChar($string){
$new_string = preg_replace("/[^a-zA-Z0-9\sçéèêëñòóôõøöàáâãäåìíîïùúûüýÿ]/u", "", $string);
return $new_string;
}

4 Cevap

Lütfen dize UTF-8 ise, regex için u değiştirici eklemek gerekir. Bu gibi:

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);

Şansını dize UTF-8 olduğunu, ancak preg_replace () bayt üzerinde çalışıyor

bu kod geçerli ...

belki Orta-Avrupa karakter kodlamasını denemelisiniz

<?php
header ('Content-type: text/html; charset=ISO-8859-2');
?>

Sen mb_ereg_replace() bakmak isteyebilirsiniz. Mark preg_replace belirtildiği gibi sadece bayt seviyesinde çalışır ve multibyte karakter kodlamaları ile iyi çalışmaz.

Cheers,
Fabian