pid/speakingurl

从字符串生成所谓的'静态'或'整洁URL'或'美观URL'或'漂亮URL'或'Speaking URL'或'用户友好URL'或'SEO友好URL'或'slug'。

安装数: 5,222

依赖项: 1

建议者: 0

安全: 0

星标: 1,110

关注者: 20

分支: 84

开放问题: 27

语言:JavaScript

0.11.0 2014-08-09 23:24 UTC

README

Build Status NPM version Bower version Gem Version Gitter Flattr

生成具有许多选项的slug;从字符串创建所谓的语义URL或'整洁URL'或'美观URL'或'漂亮URL'或'Speaking URL'或'用户友好URL'或'SEO友好URL'。本模块旨在将输入字符串转写。

适用于浏览器和服务器 - 无依赖!

NPM徽章

Module Status

安装

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

可用版本

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_-/),将 uricuricNoSlash 或/和 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

测试

Build Status

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 保留所有权利。

在满足以下条件的情况下,允许重新分发和使用源代码和二进制形式,无论是否修改:

  • 源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。
  • 二进制形式的重新分发必须复制上述版权声明、本条件列表和以下免责声明在随分发提供的文档和其他材料中。
  • 未经作者或其贡献者事先书面许可,不得使用作者或其贡献者的姓名来推广或认可源自本软件的产品。

本软件由版权所有者和贡献者提供“按原样”以及任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证均予以排除。在任何情况下,版权所有者或贡献者不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论何种原因和任何责任理论(包括疏忽或其他),即使被告知了此类损害的可能性。