首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从汉字中生成url段塞?

如何从汉字中生成url段塞?
EN

Stack Overflow用户
提问于 2014-09-06 09:18:36
回答 3查看 2.9K关注 0票数 4

通常,对于生成url段塞,我使用https://github.com/jprichardson/string.js库-以及精确的slugify方法。然而,它删除了所有的汉字。作为解决办法,我使用以下函数:

代码语言:javascript
复制
var slugify = function(str){
   str = str.replace(/\s+/g,'-') // replace spaces with dashes
   str = encodeURIComponent(str) // encode (it encodes chinese characters)
   return str
}

因此,对于输入中文 标题,我得到了%E4%B8%AD%E6%96%87-%E6%A0%87%E9%A2%98,它在web浏览器url输入框中看起来是这样的(而且它可以工作):

代码语言:javascript
复制
http://example.com/中文-标题

不过,我也想删除任何特殊字符,如!@#$%^&*)等。问题是string.js库内部正在使用以下代码:

代码语言:javascript
复制
.replace(/[^\w\s-]/g

它删除了任何特殊字符,但也删除了与\w regexp不匹配的汉字。

因此,我的问题是-如何修改上述regexp,使其保持汉字?

我试过了

代码语言:javascript
复制
replace(/[^a-zA-Z0-9_\s-\u3400-\u9FBF]/g,'')

但它仍然取代了汉字..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-06 09:48:15

如果要匹配(或排除)一组字符中的破折号-字符(带有方括号),则必须将其放在末尾。

您的regexp匹配的字符不是

  • 在范围内a-z
  • 在范围内A-Z
  • 在范围内0-9
  • _
  • 在范围内,\s-\u3400,这是你的问题
  • -
  • \u9FBF

你想做的是:

代码语言:javascript
复制
replace(/[^a-zA-Z0-9_\u3400-\u9FBF\s-]/g,'')
票数 2
EN

Stack Overflow用户

发布于 2020-02-07 20:38:13

您可以尝试乌斯卢格,它将汉语/漢語转换为汉语漢語

如果要将汉字转换为拼音,请尝试音译

票数 1
EN

Stack Overflow用户

发布于 2014-09-06 09:45:27

做一个肯定的匹配列表:

代码语言:javascript
复制
  replace(/[\!@#\$%^&\*\)]/g,'')

无论如何,我会考虑从其中删除URL元字符:

代码语言:javascript
复制
   replace(/[\!@\$\^\*\)]/g,'')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25698733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档