URL编码/解码 核心JS实现

简介: 这是一款基于Vue开发的轻量级URL编码/解码在线工具,纯前端实现,无需依赖外部库。利用`encodeURI`/`encodeURIComponent`及对应解码方法,支持一键编码、解码、清空与复制,并自动聚焦输入框,提升使用效率。

URL编码/解码 核心JS实现

核心功能实现

URL编码/解码工具的核心功能基于JavaScript原生的四个方法:encodeURIencodeURIComponentdecodeURIdecodeURIComponent。这四个方法是浏览器内置的,无需引入任何外部库,直接就可以使用。

在线工具网址:https://see-tool.com/url-encode-decode
工具截图:
工具截图.png

状态管理

使用Vue的响应式数据来管理输入和输出状态,这样当数据变化时,界面会自动更新:

const inputText = ref('')
const outputText1 = ref('')
const outputText2 = ref('')

这里定义了三个响应式变量:inputText 用于存储用户输入的原始文本,outputText1 用于存储 encodeURI 处理后的结果,outputText2 用于存储 encodeURIComponent 处理后的结果。

编码功能

编码功能是整个工具的核心之一。当用户点击编码按钮时,会触发 handleEncode 函数:

const handleEncode = () => {
   
  if (!inputText.value.trim()) {
   
    MessagePlugin.warning(t('urlEncodeDecode.emptyInput'))
    return
  }

  try {
   
    outputText1.value = encodeURI(inputText.value)
    outputText2.value = encodeURIComponent(inputText.value)
    MessagePlugin.success(t('urlEncodeDecode.encode') + ' ' + t('urlEncodeDecode.copied'))
  } catch (error) {
   
    console.error('Encode error:', error)
    MessagePlugin.error(t('urlEncodeDecode.encodeError'))
  }
}

这个函数首先检查用户是否输入了内容,如果输入框为空,会显示一个提示消息。然后使用 try-catch 包裹编码逻辑,防止异常导致程序崩溃。编码成功后,会同时生成两种编码结果并显示在界面上,同时给出成功提示。

解码功能

解码功能与编码功能相对应,当用户点击解码按钮时,会触发 handleDecode 函数:

const handleDecode = () => {
   
  if (!inputText.value.trim()) {
   
    MessagePlugin.warning(t('urlEncodeDecode.emptyInput'))
    return
  }

  try {
   
    outputText1.value = decodeURI(inputText.value)
    outputText2.value = decodeURIComponent(inputText.value)
    MessagePlugin.success(t('urlEncodeDecode.decode') + ' ' + t('urlEncodeDecode.copied'))
  } catch (error) {
   
    console.error('Decode error:', error)
    MessagePlugin.error(t('urlEncodeDecode.decodeError'))
  }
}

解码函数的结构和编码函数类似,同样先检查输入是否为空,然后尝试使用 decodeURIdecodeURIComponent 进行解码。需要注意的是,如果输入的编码字符串格式不正确,解码可能会抛出异常,所以必须使用 try-catch 来捕获错误并给用户友好的提示。

清空功能

清空功能可以一键清除所有输入和输出内容,方便用户重新开始:

const clearAll = () => {
   
  inputText.value = ''
  outputText1.value = ''
  outputText2.value = ''
  MessagePlugin.info(t('urlEncodeDecode.clear'))
}

这个函数很简单,就是将三个响应式变量都重置为空字符串,然后显示一个信息提示。

复制功能

复制功能是一个很实用的功能,用户可以一键将编码或解码结果复制到剪贴板:

const copyResult1 = async () => {
   
  if (!outputText1.value.trim()) {
   
    MessagePlugin.warning(t('urlEncodeDecode.noContent'))
    return
  }

  try {
   
    await navigator.clipboard.writeText(outputText1.value)
    MessagePlugin.success(t('urlEncodeDecode.copied'))
  } catch {
   
    const textarea = document.createElement('textarea')
    textarea.value = outputText1.value
    document.body.appendChild(textarea)
    textarea.select()
    document.execCommand('copy')
    document.body.removeChild(textarea)
    MessagePlugin.success(t('urlEncodeDecode.copied'))
  }
}

复制功能首先检查是否有内容可复制。然后优先使用现代浏览器的 navigator.clipboard API,这是目前推荐的方式。如果这个 API 不可用(比如在一些旧浏览器中),就会使用降级方案:创建一个临时的 textarea 元素,将内容设置进去,选中后执行 document.execCommand('copy') 命令,最后再移除这个临时元素。无论使用哪种方式,复制成功后都会给用户一个成功提示。

自动聚焦

为了提升用户体验,页面加载时会自动聚焦到输入框,用户可以直接开始输入:

onMounted(() => {
   
  if (process.client) {
   
    const input = document.querySelector('textarea')
    if (input) {
   
      input.focus()
    }
  }
})

这里使用了 Vue 的 onMounted 生命周期钩子,在组件挂载后执行。首先判断是否在客户端环境(因为 Nuxt.js 支持服务端渲染,服务端没有 DOM),然后找到 textarea 元素并调用 focus() 方法聚焦。

encodeURI 和 encodeURIComponent 的区别

这两个方法虽然都是用来编码 URL 的,但它们的使用场景不同:

  • encodeURI 主要用于编码完整的URL,不会编码URL中的特殊字符(如 :/?#[]@!$&'()*+,;=),因为这些字符在 URL 中是有特殊含义的,需要保留。
  • encodeURIComponent 会编码所有字符,包括URL中的特殊字符,所以它更适合编码 URL 的参数部分,比如查询字符串的值。

相应的,解码时也需要使用对应的方法:decodeURI 对应 encodeURIdecodeURIComponent 对应 encodeURIComponent

以上就是URL编码/解码工具的核心JS实现。

目录
相关文章
|
3月前
|
JavaScript 安全
URL编码/解码 在线工具分享
分享一款自研的URL编码/解码在线工具(Vue开发),支持encodeURI与encodeURIComponent两种模式。粘贴即转、一键复制,界面清爽无广告,附使用说明与编码对照表,轻松处理中文及特殊字符。
10042 2
|
JavaScript 前端开发
2022年了!你有几种获取URL参数的方法?
前言 作为一个前端开发,我们很多时候都需要对URL进行操作和处理,最常见的一种就是获取URL链接中携带的参数值了。使用框架开发的小伙伴可能会觉得这很简单,因为框架提供了很多方法让我们方便的获取URL链接携带的参数。但是有些时候我们不能依赖框架,需要我们使用原生JS去获取参数,这也是面试中经常遇到的一道题。今天我们就手撕代码,利用原生JS去获取URL链接参数值。
2219 1
2022年了!你有几种获取URL参数的方法?
|
6天前
|
人工智能 API 开发工具
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
Claude Code是我目前最推荐的AI编程工具,没有之一。 它可能不是最简单的,但绝对是上限最高的。一旦跑通安装、接上模型、定好规范,你会发现很多原本需要几小时的工作,现在几分钟就能搞定。 这套方案的核心优势就三个字:可控性。你不用依赖任何不稳定服务,所有组件都在自己手里。模型效果不好?换一个。框架更新了?自己决定升不升。 这才是AI时代开发者该有的姿势——不是被动等喂饭,而是主动搭建自己的生产力基础设施。 希望这篇保姆教程,能帮你顺利上车。做出你自己的作品。
8732 18
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
|
3月前
|
存储 自然语言处理 安全
MD5在线加密工具分享
一款基于Nuxt 3开发的MD5在线校验工具,支持文本(含Base64/Hex等格式)与文件(拖拽上传、本地分片计算)快速生成MD5摘要,输出可选Hex/Base64等格式并一键转大写。全程浏览器端处理,隐私安全,专为文件完整性校验设计。
960 2
|
12天前
|
数据可视化 JavaScript
在线Cron表达式生成器分享
专为新手设计的在线Cron生成器!无需死记`* / , -`等符号,3步可视化配置(选频率→填时间→复制表达式),实时生成可用规则。Vue2开发,支持5/6位格式提醒与时区提示,助你轻松搞定定时任务。
252 2
|
3月前
|
人工智能 JavaScript Serverless
这个Skill能自动学会你的所有习惯,踩过的坑!
Claudeception是一款让Claude Code自动学习用户工作模式的智能插件。它通过分析调试过程、写作流程、文件管理等真实行为,将经验沉淀为可复用的Skill,实现“越用越懂你”。GitHub获1660星,适合Claude重度用户,2–3周后效果显著。(239字)
|
2月前
|
存储 人工智能 网络安全
保姆级教程:OpenClaw 阿里云/本地部署及集成 Skills 步骤,立即让 AI 干活!
如果说OpenClaw与大模型的组合是给AI助理赋予了“智能大脑”,那么Skills就是为它装上了“灵活手脚”。作为OpenClaw的核心扩展能力,Skills是可安装、可卸载的功能模块,能够让基础版OpenClaw突破原生限制,解锁网页浏览、邮件管理、文件处理、多平台交互等复杂操作。截至2026年2月,Clawhub(OpenClaw官方技能市场)已收录超过5700个各类Skills,覆盖办公、开发、娱乐、生活等多场景,安装量最高的技能下载量突破2000次,成为提升OpenClaw实用性的关键。
2398 8
|
3月前
|
运维 前端开发 安全
文本差异对比器 在线工具分享
日常工作中常需对比文本/代码差异,肉眼识别易错低效。推荐我开发的在线工具——文本差异对比器,支持行/词/字符三级对比,红删绿增高亮显示,可忽略空格/大小写,纯前端运行,隐私安全,响应式设计,即开即用。
797 1
|
3月前
|
JSON JavaScript 算法
JSON格式化与压缩 在线工具分享
一款基于Vue 3开发的轻量级JSON在线工具,支持一键格式化、极致压缩、字符串转义/去转义及智能自动修复(兼容单引号、省略引号等非标写法)。无广告、带语法高亮、夜间模式与一键复制,提升开发效率。
515 11
JSON格式化与压缩 在线工具分享
|
6月前
|
前端开发 API UED
突破异步困境:掌握Promise.allSettled()的实用技巧
突破异步困境:掌握Promise.allSettled()的实用技巧
361 112