gpt4 book ai didi

php - 如何删除 PHP 字符串中的 %EF%BB%BF

转载 作者:可可西里 更新时间:2023-10-31 23:53:31 25 4
gpt4 key购买 nike

我正在尝试使用 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));

返回的数据在返回字符串的第一个字符中有一个 ' ' 字符。它不是空格,因为我在返回数据之前对其进行了修剪。

' ' 字符原来是 %EF%BB%BF。

我想知道为什么会这样,也许是 Microsoft 的错误?

如何在 PHP 中删除这个 %EF%BB%BF?

最佳答案

除非您 100% 确定流将:(a) 始终为 UTF-8,并且 (b) 始终具有 UTF-8 BOM,否则您不应简单地丢弃 BOM。

原因:

  1. 在 UTF-8 中,BOM 是可选的 - 因此,如果服务在未来某个时间停止发送它,您将丢弃响应的前三个字符。
  2. BOM 的全部目的是明确标识被解释为 UTF-8 的 UTF 流的类型? -16?或 -32?,并指示编码信息的“字节顺序”(字节顺序)。如果你只是把它扔掉,你就假设你总是得到 UTF-8;这可能不是一个很好的假设。
  3. 并非所有 BOM 都是 3 个字节长,只有 UTF-8 是三个字节。 UTF-16 是两个字节,UTF-32 是四个字节。因此,如果将来该服务切换到更广泛的 UTF 编码,您的代码将会中断。

我认为更合适的处理方式是这样的:

/* Detect the encoding, then convert from detected encoding to ASCII */
$enc = mb_detect_encoding($data);
$data = mb_convert_encoding($data, "ASCII", $enc);

关于php - 如何删除 PHP 字符串中的 %EF%BB%BF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4057742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com