Php bir dizeden unicode karakter (LEFT_TO_RIGHT_MARK) nasıl soyunduğunu

6 Cevap php

JSON olarak kodlayan önce bir dizeden SOL-TO-SAĞ-MARK (\ u200e) ve SAĞ-TO-SOL-MARK (\ u200f) çıkarmak için çalışıyorum. Aşağıdakilerden ne iş gibi görünüyor:

$s = mb_ereg_replace("\u200e", '', $s);
$s = preg_replace("#\u200e#u", '', $s);
$s = preg_replace("#\u200e#", '', $s);

Herhangi bir Yardım takdir!

6 Cevap

Sizin Unicode öncelemeli yanlış, bu çalışması gerekir:

preg_replace('/\x20(\x0e|\x0f)/', '', $string)

Testi:

<?php
  $string = chr(0x20) . chr(0x0e) . 'fo' . chr(0x20) . chr(0x0e) . 'o' . chr(0x20) . chr(0x0f);
  echo $string . "\n";
  echo preg_replace('/\x20(\x0e|\x0f)/', '', $string);
?>

Ya da, str_replace():

  str_replace(array("\x20\x0e", "\x20\x0f"), '', $string);

UTF-8 içinde komut dosyası kodlama denedim ve aslında orada karakterleri yazarak (veya + yapıştırma kopyalama) mı?

Ne str_replace kullanarak ve karakter kodları bulunuyor kullanarak bu karakter kodlama hakkında; belki böyle bir şey:

$new_string = str_replace("\x20\x0f", "", $your_string);

Değiştirmek için birkaç farklı karakter var gibi ve sizin durumda, size bir çağrıda tüm bunları değiştirmek olabilir str_replace:

$new_string = str_replace(
    array(
        "\x20\x0e", 
        "\x20\x0f", 
    ),
    array(
        "", 
        "", 
    ),
    $your_string
);

Bu sorun için çalışır mı?

Bunu dener misin? 200E ve 200f onun utf8 kodlama

$s=preg_replace('/\xe2\x80[\x8e\x8f]/', '', $s)

veya str_replace ile

$s=str_replace("\xe2\x80\x8e", "", $s);
$s=str_replace("\xe2\x80\x8f", "", $s);

Bu deneyin

preg_replace('/\x{E2}\x{80}\x{8E}/', '', $s); 
// strip unicode chars (LEFT_TO_RIGHT_MARK) 

Birkaç gün için bu konu ile güreş sonra nihayet cevabını bulduk!

$str = preg_replace('/(\x{200e}|\x{200f})/u', '', $str);