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

重写“漂亮的网址”时如何处理变音符号(重音符号)

李嘉胜
2023-03-14
问题内容

我重写了URL,以包括用户生成的travelblogs的标题。

我这样做是出于URL的可读性和SEO的目的。

 http://www.example.com/gallery/280-Gorges_du_Todra/

第一个整数是id,其余的对我们来说是人类(但与请求资源无关)。

现在,人们可以编写包含任何UTF-8字符的标题,但URL中不允许使用大多数字符。我的听众通常是说英语的,但自从旅行以来,他们喜欢添加诸如

 本·哈杜(AïtBen Haddou)

在Linux上使用PHP进行翻译以显示在URL中的正确方法是什么。

到目前为止,我已经看到了几种解决方案

  1. 只需删除所有不允许的字符,替换空格,这将产生奇怪的结果:
    'Aït Ben Haddou' → /gallery/280-At_Ben_Haddou/
    并不是很有帮助。

  2. 只需去除所有不允许的字符,替换空格,保留字符代码,最可能的原因是使用了’regex-hammer’, 这会产生奇怪的结果: 'tést tést' → /questions/0000/t233st-t233st

  3. 翻译成“最近等效”,
    'Aït Ben Haddou' → /gallery/280-Ait_Ben_Haddou/
    但这对于德国人是错误的 例如,“ü”应音译为“ ue”。

对我来说,作为荷兰人,第三名看起来“最好”。
但是,我非常确定(1)许多人会有不同的看法,并且(2)在德国示例中这完全是错误的。

第三个选项的另一个问题是:如何找到所有可以转换为7位等效字符的字符?

所以问题是:

  1. 您认为最理想的结果是什么。(在技术限制内)

  2. 如何从技术上解决它。(达到期望的结果)。


问题答案:

最终,对于这个问题,您将不得不放弃“正确”的想法。无论您如何操作,翻译字符串都会破坏兼容性和可读性的准确性。这三个选项均兼容,但是#1和#2在可读性方面受到影响。因此,只需运行它,然后选择最适合的方法-
选项3。

是的,德语翻译是错误的,但是除非您开始要求用户指定其标题所使用的语言(并将其限制为仅一种语言),否则您将不费吹灰之力地解决该问题。(例如,通过词典针对每种已知语言运行标题中的每个单词,并根据其语言规则翻译该单词的变音符号是
可行的 ,但这是多余的。)

另外,如果德语比其他语言更受关注,请在存在以下语言的情况下 始终 使用德语版本进行翻译:äaeëeïiö
oeüue

编辑:

哦,关于实际方法,我将通过转换特殊情况(如果有的话)str_replace,然后将其iconv用于其余部分:

$text = str_replace(array("ä", "ö", "ü", "ß"), array("ae", "oe", "ue", "ss"), $text);
$text = iconv('UTF-8', 'US-ASCII//TRANSLIT', $text);


 类似资料:
  • 问题内容: 如何从字符串中删除重音符号?尤其是在IE6中,我有类似以下内容: 但是IE6困扰着我,似乎不喜欢我的正则表达式。 问题答案: 使用ES2015 / ES6 String.Prototype.Normalize(), 这里发生两件事: 根据Unicode规范形式,将组合的字形分解为简单的字形。在中端起来表示为+ 。 现在,使用正则表达式字符类来匹配U + 0300→U + 036F范围,

  • 我必须编写一个小程序来删除作为输入的字符串中的重音。我还必须创建一个函数,将每个带重音的字符替换为相应的不带重音的字符,我有一个循环,为main中的每个字符调用该函数: 问题是,如果我在main中提供字符串“é”作为输入,则该字符串被视为大小为2的字符串(参见下面的示例),并且上面的函数被调用两次而不是一次。此外,作为函数输入的char不是正确的。我想我在函数中遇到了相同的大小问题。这个重音不应该

  • 问题内容: 我已经研究了StackOverflow替换字符。eh,JavaScript如何不遵循有关RegExp的Unicode标准等),还没有真正找到问题的具体答案: 我正在强制UI中的字段匹配以下格式:( 最后一个[逗号空间]首先) ,并且我想提供对变音符号的支持,但是显然在JavaScript中,它比其他语言/平台要难一些。 这是我的原始版本,直到我想添加变音符号支持: 目前,我正在讨论增加

  • 我看了Stack Overflow(替换字符...呃,JavaScript如何不遵循有关RegExp的Unicode标准等),但还没有真正找到“JavaScript如何匹配重音字符(带有变音符号的字符)”这个问题的具体答案? 我正在强制UI中的字段匹配格式:(最后[逗号空间]第一),我想提供对变音符号的支持,但显然在JavaScript中它比其他语言/平台更难。 这是我的原始版本,直到我想添加变音

  • 问题内容: 我刚刚编译了一个包含100万个地名的数据库。我将在自动完成的小部件中使用它来查找城市。这些地方很多都带有重音符号…我希望能够在用户键入不带重音符号的名称时查找记录。 为了做到这一点,我在第二栏中有一个名字的重音符号。这些记录中的许多记录仍然是空白的,因此我想编写一个查询来填充它们。在直接的MySQL中可能吗?如果是这样,怎么办? 问题答案: 如果您为该列设置了适当的排序规则,则该字段中

  • 问题内容: 我正在尝试从PHP字符串中的字符中删除重音符号,作为使字符串在URL中可用的第一步。 我正在使用以下代码: 我期望的输出将是这样的: 但是,不是将重音字符音译,而是将它们替换为问号: 我在网上可以找到的所有内容都表明,设置语言环境将解决此问题,但是我已经这样做了。我已经检查了以下详细信息: 服务器支持我设置的语言环境(包含在产生的列表中) 服务器的iconv版本(包含在产生的列表中)支