我想从字符串中删除ZERO WIDTH NON-JOINER字符,但使用str_replace
无效。
答案 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");
按预期输出:
foobar - 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。