获取iconv来转换字符串


Get iconv to convert my string

我有以下字符串:

ᴰᴶ Bagi

是否有可能让iconv进入DJ Bagi ?

首先我尝试了:

$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

导致以下通知:

Notice: iconv() [function.iconv]: Detected an illegal character in input string 

在PHP站点上我看到有人使用:

//IGNORE//TRANSLIT

虽然这防止了通知,但我只得到:

Bagi

我最初认为这是您端的编码问题,但如果我从soundcloud源页面本地复制+粘贴这些字符:

ᴰᴶ Bagi

并尝试将它们图标化,我得到的结果与您相同。这意味着数据是UTF-8,但是iconv不将识别为D 的"子"。无法转换字符,它抱怨(在我看来有点误导)一个非法字符。

Edit:这似乎确实是真的。上标D不在Unicode上标和下标范围内,但它是一个音标字符。这可能就是为什么它们不能被映射回"母"字母的原因。这里有更多关于的信息

据我所知,您唯一的选择是手动替换字符。

最原始的替换示例是

str_replace("ᴰ", "D", $string);

(注意,您的源文件需要存储为UTF-8才能工作)

对于一个优雅的解决方案,您可以用源字符和替换字符构建一个数组,并将其传递给str_replace调用。

或者打电话给DJ Bagi,告诉他把这些该死的字母弄清楚。你会注意到Soundcloud的URL生成器遇到了完全相同的问题。

soundcloud.com/bagi