我正在尝试使用Microsoft Bing API。
$data = file_get_contents("http://api.microsofttranslator.com/V2/Ajax.svc/Speak?appId=APPID&text={$text}&language=ja&format=audio/wav");
$data = stripslashes(trim($data));
返回的数据在返回的字符串的第一个字符中有一个'\ n'字符。它不是空间,因为我在返回数据之前对其进行了尝试。
''字符竟然是%EF%BB%BF。
我想知道为什么会这样,也许是微软的错误?
如何在PHP中删除此%EF%BB%BF?
答案 0 :(得分:17)
除非您100%确定流将:(a)始终为UTF-8,并且(b)始终具有UTF-8 BOM,否则不应简单地丢弃BOM。
原因:
我认为更合适的方法是:
/* Detect the encoding, then convert from detected encoding to ASCII */
$enc = mb_detect_encoding($data);
$data = mb_convert_encoding($data, "ASCII", $enc);
答案 1 :(得分:5)
$data = file_get_contents("http://api.microsofttranslator.com/V2/Ajax.svc/Speak?appId=APPID&text={$text}&language=ja&format=audio/wav");
$data = stripslashes(trim($data));
if (substr($data, 0, 3) == "\xef\xbb\xbf") {
$data = substr($data, 3);
}
答案 2 :(得分:2)
这是byte order mark(BOM),表示响应编码为UTF-8。您可以安全地删除它,但您应该将剩余部分解析为UTF-8。
答案 3 :(得分:0)
我今天遇到了同样的问题,并通过确保字符串设置为UTF-8来修复:
http://php.net/manual/en/function.utf8-encode.php
$ content = utf8_encode($ content);
答案 4 :(得分:-1)
要从字符串的开头删除它(仅限):
$data = preg_replace('/^%EF%BB%BF/', '', $data);
答案 5 :(得分:-1)
$data = str_replace('%EF%BB%BF', '', $data);
您可能不应该使用stripslashes
- 除非API返回黑色数据(并且99.99%的可能性没有),请接听该电话。
答案 6 :(得分:-3)