Как разделить unicode символы (LEFT_TO_RIGHT_MARK) от строки в php

Я пытаюсь удалить LEFT-TO-RIGHT-MARK (\u200e) и RIGHT-TO-LEFT-MARK (\u200f) от строки прежде, чем закодировать его JSON. Ни одно из следующего, кажется, не работает:

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

Любая справка ценится!

9
задан Marc 18 December 2009 в 18:48
поделиться

4 ответа

Пробовали ли вы кодировать файл сценария в UTF-8 и вводить (или копировать + вставлять) туда символы?

0
ответ дан 4 December 2019 в 15:21
поделиться

А как насчет использования str_replace и кодирования этого символа с помощью его кодов символов; что-то вроде этого, может быть:

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

И, в вашем случае, поскольку вам нужно заменить несколько разных символов, вы можете заменить их все за один вызов str_replace :

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

Работает ли это для вашей проблемы ?

0
ответ дан 4 December 2019 в 15:21
поделиться

Можете ли вы попробовать его кодировку utf8 в 200e и 200f

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

или с помощью str_replace

$s=str_replace("\xe2\x80\x8e", "", $s);
$s=str_replace("\xe2\x80\x8f", "", $s);
0
ответ дан 4 December 2019 в 15:21
поделиться

Ваше экранирование Юникода неверно, это должно сработать:

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

Тест:

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

Или используйте str_replace():

  str_replace(array("\x20\x0e", "\x20\x0f"), '', $string);
6
ответ дан 4 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: