2

我想从字符串中删除ZERO WIDTH NON-JOINER字符,但使用str_replace没有用。

4

2 回答 2

5

str_replace 应该可以解决这个问题,只要你小心你要替换的东西。

// \xE2\x80\x8C is ZERO WIDTH NON-JOINER
$foo = "foo\xE2\x80\x8Cbar";

print($foo . " - " . strlen($foo) . "\n");
$foo = str_replace("\xE2\x80\x8C", "", $foo);
print($foo . " - " . strlen($foo) . "\n");

预期的输出:

foo‌bar - 9
foobar - 6
于 2012-11-20T20:46:21.577 回答
0

str_replace 会做你想做的事,但是 PHP 对 Unicode 没有很好的原生支持。以下将按照您的要求进行。json_decode 已用于获取 Unicode 字符,因为 PHP 不支持 \u 语法。

<?php
$unicodeChar = json_decode('"\u200c"');
$string = 'blah'.$unicodeChar.'blah';
echo str_replace($unicodeChar, '', $string);
?>

编辑:虽然我的方法有效,但我建议您使用 fiskfisk 的解决方案。它比使用 json_decode 更简单。

于 2012-11-20T20:51:31.027 回答