如何从字符串中删除零宽度非连接符?

3

我有一个 PHP 脚本中的字符串

$str="इन रिकॉ‌र्ड्स पर है सलमान की नजर, धूम-3 को पछाड़ेगी जय हो?";

并且使用以下代码进行转换:

$encoded_string = bin2hex(mb_convert_encoding($str, "UTF-16BE", 'UTF-8'));

移动设备的输出:

这些字词引起了 Salman 的注意,Jay Ho 会超越 Dhoom-3 吗?(此处输出中显示了零宽度非连接符)

但最终输出中出现零宽度非连接符**。如何在转换字符串时删除此实体而不是在获取最终输出后进行处理?

4个回答

2
$content = preg_replace( "/\x{200c}/u", '', $content );

感谢您的帮助,当我使用 preg_replace 时遇到了这个问题。 - Killuminati
这帮助我解决了我的问题。我之前在 unicode chart 上看到了一个提示,0x200C 是零宽度非连接符。执行 preg_replace 然后 Poof!问题解决了。 - khalifmahdi
如果字符串中存在“真实”的零宽度非连接符字符,则这是正确的正则表达式。其他解决方案假定该字符已经被转义为HTML输出。 - RoloDMonkey

2

找到了解决方案,只需将字符串中的零宽度不连字符实体替换掉即可。

 $str=str_replace('‌','',$str);

     **OR**  

 $str=str_replace('‌','',$str;

2
$content = preg_replace( '/^[\pZ\pC]+|[\pZ\pC]+$/u', '', $content );

-1

我有同样的问题。我通过使用正则表达式解决了它。

    import re
    mystring = "Hello W‌e"
    mystring  = re.sub(r"‎","",mystring)
    mystring  = re.sub(r"‌","",mystring)

&zwnj = 零宽度不连字符号 &lrm = 从左到右标记


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接