如何从php中的字符串中删除unicode字符(LEFT_TO_RIGHT_MARK)

时间:2009-12-18 18:48:33

标签: php regex utf-8

我正在尝试从字符串中删除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);

感谢任何帮助!

6 个答案:

答案 0 :(得分:7)

在与这个问题搏斗了几天之后,我终于找到了答案!

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

答案 1 :(得分:5)

您的Unicode转义是错误的,这应该有效:

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

答案 2 :(得分:0)

您是否尝试过以UTF-8编码脚本文件,并在那里输入(或复制+粘贴)字符?

答案 3 :(得分:0)

如何使用str_replace,并使用它的字符代码对该字符进行编码;像这样的东西,也许:

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

而且,在您的情况下,由于您要替换几个不同的字符,您可以在一次调用str_replace中将它们全部替换掉​​:

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

它对您的问题有用吗?

答案 4 :(得分:0)

你可以尝试一下吗?它的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);

答案 5 :(得分:0)

试试这个

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