从PHP中的字符串中删除ZERO WIDTH NON-JOINER字符

时间:2012-11-20 20:37:04

标签: php unicode

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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更少hacky。