pid / speakingurl
从字符串生成所谓的'静态'或'整洁URL'或'美观URL'或'漂亮URL'或'Speaking URL'或'用户友好URL'或'SEO友好URL'或'slug'。
README
生成具有许多选项的slug;从字符串创建所谓的语义URL或'整洁URL'或'美观URL'或'漂亮URL'或'Speaking URL'或'用户友好URL'或'SEO友好URL'。本模块旨在将输入字符串转写。
适用于浏览器和服务器 - 无依赖!
NPM徽章
安装
npm
npm install speakingurl --save
yarn
yarn add speakingurl --dev
Bower
bower install --save speakingurl
组件
component install pid/speakingurl
Ruby on Rails
# Add to Gemfile gem 'speakingurl-rails'
下载包
将文件speakingurl.min.js复制到您的脚本目录
CDN/cloudflare
可用版本
- www.cdnjs.com/libraries/speakingurl/
- 使用 //cdnjs.cloudflare.com/ajax/libs/speakingurl/14.0.1/speakingurl.min.js
CDN/maxcdn
可用版本
用法
getSlug(input, [options]);
input
: {string} 转换的字符串
options
{object|string} 配置对象或分隔符字符串(见下文)
-
options
{object}separator
{string} 默认: '-'- 替换空格的字符
lang
{string|boolean} 默认: 'en' // ISO 639-1 Codes- 语言特定的转写(
- 'ar' // 阿拉伯语
- 'az' // 阿塞拜疆语*
- 'cs' // 捷克语
- 'de' // 德语
- 'dv' // 迪维希语
- 'en' // 英语
- 'es' // 西班牙语
- 'fa' // 波斯语
- 'fi' // 芬兰语
- 'fr' // 法语
- 'ge' // 格鲁吉亚语
- 'gr' // 希腊语*
- 'hu' // 匈牙利语
- 'it' // 意大利语
- 'lt' // 立陶宛语*
- 'lv' // 拉脱维亚语
- 'my' // 缅甸语
- 'mk' // 马其顿语*
- 'nl' // 荷兰语
- 'pl' // 波兰语
- 'pt' // 葡萄牙语
- 'ro' // 罗马尼亚语
- 'ru' // 俄语
- 'sv' // 瑞典语
- 'sk' // 斯洛伐克语
- 'sr' // 塞尔维亚语*
- 'tr' // 土耳其语
- 'uk' // 乌克兰语
- 'vn' // 越南语
- 语言特定的转写(
symbols
{boolean} 默认: true- false -> 不转换符号
- true -> 根据lang设置转换符号
maintainCase
{boolean} 默认: false- true -> 保留大小写字符
- false -> 将所有字符转换为小写
titleCase
{boolean|array} 默认: false- true -> 将输入字符串转换为标题大小写
- array -> titlecase = true,但省略数组中的单词
truncate
{number} 默认: 0- 0 -> 不修剪长度
- >= 1 -> 修剪到最大长度,同时不破坏任何单词
uric
{boolean} 默认: false- true -> 允许额外字符: ";", "?", ":", "@", "&", "=", "+", "$", ",", "/"
- false
uricNoSlash
{boolean} 默认: false- true -> 允许额外字符: ";", "?", ":", "@", "&", "=", "+", "$", ","
mark
{布尔值} 默认: false- true -> 允许额外的字符: "-", "_", ".", "!", "~", "*", "'", "(", ")"
custom
{对象|数组} 默认: {}- 对象 -> 翻译的自定义映射,覆盖所有,例如 { '&': '#', '*': '星号 ' }
- 数组 -> 向允许的字符映射(charMap)中添加字符(见示例)
-
options
{字符串} 分隔符
注意:默认只允许Base64字符(/A-Za-z0-9_-/),将 uric
、uricNoSlash
或/和 mark
设置为 true
将将指定的字符添加到允许字符列表。分隔符字符总是允许的。
Node.js
var getSlug = require('speakingurl');
浏览器
<script src="bower_components/speakingurl/speakingurl.min.js"></script>
Ruby on Rails
# Add to application.js //= require speakingurl
示例
var slug; slug = getSlug("Schöner Titel läßt grüßen!? Bel été !"); console.log(slug); // Output: schoener-titel-laesst-gruessen-bel-ete slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", '*'); console.log(slug); // Output: schoener*titel*laesst*gruessen*bel*ete slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", { separator: '_' }); console.log(slug); // Output: schoener_titel_laesst_gruessen_bel_ete slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", { uric: true }); console.log(slug); // Output: schoener-titel-laesst-gruessen?-bel-ete slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", { uricNoSlash: true }); console.log(slug); // Output: schoener-titel-laesst-gruessen?-bel-ete slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", { mark: true }); console.log(slug); // Output: schoener-titel-laesst-gruessen!-bel-ete-! slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", { truncate: 20 }); console.log(slug); // Output: schoener-titel slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", { maintainCase: true }); console.log(slug); // Output: Schoener-Titel-laesst-gruessen-Bel-ete slug = getSlug("Äpfel & Birnen!", { lang: 'de' }); console.log(slug); // Output: aepfel-und-birnen slug = getSlug("မြန်မာ သာဓက", { lang: 'my' }); console.log(slug); // Output: myanma-thadak slug = getSlug('މިއަދަކީ ހދ ރީތި ދވހކވ', { lang: 'dv' }); console.log(slug); // Output: miadhakee hd reethi dvhkv slug = getSlug("Apple & Pear!", { lang: 'en' // lang: "en" is default, just to clarify }); console.log(slug); // Output: apple-and-pear slug = getSlug('Foo & Bar * Baz', { custom: { '&': ' doo ' }, uric:true }); console.log(slug); // Output: foo-doo-bar-baz slug = getSlug('Foo ♥ Bar'); console.log(slug); // Output: foo-love-bar slug = getSlug('Foo & Bar | (Baz) * Doo', { custom: { '*': 'Boo' }, mark:true }); console.log(slug); // Output: foo-and-bar-or-(baz)-boo-doo slug = getSlug('Foo and Bar or Baz', { custom: { 'and': 'und', 'or': '' } }); console.log(slug); // Output: foo-und-bar-baz slug = getSlug('[Knöpfe]', { custom: [ '[', ']' ] }); console.log(slug); // Output: [knoepfe] slug = getSlug('NEXUS4 only $299'); console.log(slug); // Output: nexus-4-only-usd299 slug = getSlug('NEXUS4 only €299', { maintainCase: true }); console.log(slug); // Output: NEXUS-4-only-EUR299 slug = getSlug('Don\'t drink and drive', { titleCase: true }); console.log(slug); // Output: Don-t-Drink-And-Drive slug = getSlug('Don\'t drink and drive', { titleCase: ['and'] }); console.log(slug); // Output: Don-t-Drink-and-Drive slug = getSlug('Foo & Bar ♥ Foo < Bar', { lang: false }); console.log(slug); // Output: foo-bar-foo-bar slug = getSlug('Foo & Bar ♥ Foo < Bar', { symbols: false }); console.log(slug); // Output: foo-bar-foo-bar slug = getSlug('ä♥ä', { lang: 'tr', symbols: false }); console.log(slug); // Output: a
createSlug([options])
options
: {对象|字符串} 配置对象或分隔符字符串(见上方)
创建您自己的特别配置的函数。
var options = { maintainCase: true, separator: '_' }; var mySlug = require('speakingurl').createSlug(options); // in browser: // var mySlug = createSlug(options); var slug = mySlug("Schöner Titel läßt grüßen!? Bel été !"); console.log(slug); // Output: Schoener_Titel_laesst_gruessen_Bel_ete
创建具有标题大小写功能的特别配置的函数。
var options = { titleCase: [ "a","an","and","as","at","but", "by","en","for","if","in","nor", "of","on","or","per","the","to","vs" ] }; var mySlug = require('speakingurl').createSlug(options); // in browser: // var mySlug = createSlug(options); var slug = mySlug('welcome to the jungle'); console.log(slug); // Output: Welcome-to-the-Jungle
变更日志
查看 CHANGELOG.md
测试
npm test
贡献
# fork pid/speakingurl on Github $ git clone git@github.com:<YOUR_USER>/speakingurl.git $ cd speakingurl $ npm install # add your stuff # add tests # add example for new feature # add release info to CHANGELOG.md # add description/example to README.md $ gulp $ commit files (speakingurl.min.js,...) # if everything works fine, commit, push to your repository # create pull request
发布
$ gulp bumpup --patch # --minor # --major
$ gulp
$ gulp release
发布到 RubyGems.org
$ gulp $ gem build speakingurl-rails.gemspec $ gem push speakingurl-rails-x.x.x.gem
参考
在其他环境中使用
端口
鸣谢
许可证
BSD 3-Clause 许可证 (BSD3)
版权所有 (c) 2013-2017 Sascha Droste pid@posteo.net 保留所有权利。
在满足以下条件的情况下,允许重新分发和使用源代码和二进制形式,无论是否修改:
- 源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。
- 二进制形式的重新分发必须复制上述版权声明、本条件列表和以下免责声明在随分发提供的文档和其他材料中。
- 未经作者或其贡献者事先书面许可,不得使用作者或其贡献者的姓名来推广或认可源自本软件的产品。
本软件由版权所有者和贡献者提供“按原样”以及任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证均予以排除。在任何情况下,版权所有者或贡献者不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论何种原因和任何责任理论(包括疏忽或其他),即使被告知了此类损害的可能性。