当前位置: 首页 > 面试题库 >

如何从PHP字符串中的字符中删除重音符号?

卢书
2023-03-14
问题内容

我正在尝试从PHP字符串中的字符中删除重音符号,作为使字符串在URL中可用的第一步。

我正在使用以下代码:

$input = "Fóø Bår";

setlocale(LC_ALL, "en_US.utf8");
$output = iconv("utf-8", "ascii//TRANSLIT", $input);

print($output);

我期望的输出将是这样的:

F'oo Bar

但是,不是将重音字符音译,而是将它们替换为问号:

F?? B?r

我在网上可以找到的所有内容都表明,设置语言环境将解决此问题,但是我已经这样做了。我已经检查了以下详细信息:

  1. 服务器支持我设置的语言环境(包含在产生的列表中locale -a
  2. 服务器的iconv版本(包含在产生的列表中)支持源编码和目标编码(UTF-8和ASCII iconv -l)。
  3. 输入字符串是UTF-8编码的(使用PHP mb_check_encoding函数进行了验证
  4. 的调用setlocale成功(返回'en_US.utf8'而不是FALSE

问题原因:

服务器正在使用错误的iconv实现。它具有 glibc 版本,而不是必需的 libiconv 版本。

请注意,某些系统上的iconv功能可能无法按预期工作。在这种情况下,最好安装GNU libiconv库。最终可能会得到更一致的结果。
– PHP手册对iconv的介绍

phpinfo函数的输出中包含有关PHP使用的iconv实现的详细信息。

(我无法在与此项目一起使用的服务器上使用正确的iconv库重新编译PHP,因此下面我接受的答案是在没有iconv支持的情况下删除重音符号的最有用的答案。)


问题答案:

我认为这里的问题是您的编码将ä和å的符号视为与’a’不同。实际上,strtr的PHP文档提供了一个以难看的方式消除重音的示例



 类似资料:
  • 问题内容: (据我所知)Android中是否有任何方法都没有java.text.Normalizer从字符串中删除任何重音符号。例如,“éàù”变成“ eau”。 如果可能,我想避免解析String来检查每个字符! 问题答案: 在Android中可用(无论如何都是最新版本)。您可以使用它。 编辑 供参考,这里是如何使用: (从下面评论中的链接粘贴)

  • 问题内容: 可能吗?这是我的输入字符串: 这是我想要的输出: 问题答案: Wordpress使用了一个功能,效果很好。这是带有输出的工作代码。

  • 问题内容: 如何从PHP字符串中删除STX等控制字符?我玩过 但发现它消除了很多麻烦。有没有办法 只 删除 控制字符? 问题答案: 如果用控制字符表示前32个ASCII字符和(包括回车等),那么它将起作用: (请注意单引号:双引号的使用会以某种方式导致解析错误。) 可以这样删除换行和回车符(通常写为和),以免删除: 更好地传达了代码的作用。 警告: PHP> = 5.3.0中已弃用,而PHP> =

  • 问题内容: 我在删除特殊字符时遇到问题。我想删除除“()/。%-&”以外的所有特殊字符,因为我将该字符串设置为标题。 我编辑了原始代码(如下所示): 但这无法删除特殊字符,例如:“,”,“”。 原始代码:(此方法有效,但会删除以下字符:“()/。%-&”) 问题答案: 您的句点匹配所有字符。转义它(和其他特殊字符),如下所示:

  • 问题内容: 如何从字符串中删除变音符号? 例如,转换适用于所有语言的所有á-> a,č-> c等。 我正在进行全文搜索,因此需要忽略搜索文字的任何变音符号。 谢谢 问题答案: 使用9级以上的API,您可以使用Normalizer类,例如 (Keysers链接的答案看起来更好,它可以清除更多废话) 这将返回。

  • 问题内容: 如何从Swift中删除变音符号(或重音符号)(例如说将“één”更改为“ een”)?我必须回到Swift还是可以在Swift中完成? 问题答案: 您可以直接在Swift上操作(如果导入了“ Foundation”): 斯威夫特3: