javascript - 如何编码 Javascript
问题描述
如何解码从:
\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3a\x61\x6c\x65\x72\x74\x28313\x29
到:
javascript:alert(313)
有谁知道编码,请指导我,我将非常感谢你!
谢谢!
解决方案
您可以编写一个简单的解析器,将 Unicode 代码点转换为等效字符。
const main = () => {
const convertBtn = document.querySelector('.convert');
convertBtn.addEventListener('click', onConvert);
triggerEvent(convertBtn, 'click');
};
const onConvert = e => {
const input = document.querySelector('.input');
const output = document.querySelector('.output');
output.value = parseUnicodeString(input.value);
};
const parseUnicodeString = unicodeSring => {
let result = '', buffer = null;
for (let i = 0; i < unicodeSring.length; i++) {
if (unicodeSring[i] === 'x') {
buffer = '';
} else if (/[0-9a-f]/.test(unicodeSring[i])) {
if (buffer != null) {
if (buffer.length === 1) {
result += parseCodePoint(buffer + unicodeSring[i]);
buffer = null;
} else {
buffer += unicodeSring[i];
}
} else {
result += unicodeSring[i];
}
}
}
if (buffer != null && buffer.length > 0) {
result += parseCodePoint(buffer);
}
return result;
}
const parseCodePoint = codePoint =>
String.fromCodePoint(parseInt(codePoint, 16));
const triggerEvent = (el, eventName, data) => {
let event;
if (window.CustomEvent && typeof window.CustomEvent === 'function') {
event = new CustomEvent(eventName, {detail: data});
} else {
event = document.createEvent('CustomEvent');
event.initCustomEvent(eventName, true, true, data);
}
el.dispatchEvent(event);
};
main();
body,html{width:100%;height:100%;margin:0;padding:0;background:#000;color:#fff}body{display:flex;flex-direction:column}button{background:#c46;border:thin solid #d26;color:#eee;padding:.125em;font-weight:700;cursor:pointer}button:hover{background:#f47;color:#fff}textarea{flex:1;background:#222;color:#eee;resize:none;border:none;outline:0;padding:.25em}
<textarea class="input">\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3a\x61\x6c\x65\x72\x74\x28313\x29</textarea>
<button class="convert">Convert</button>
<textarea class="output">
</textarea>
如果结合String.prototype.replace
正则表达式,您可以将上面的逻辑简单地变成一条线。
const main = () => {
const convertBtn = document.querySelector('.convert');
convertBtn.addEventListener('click', onConvert);
triggerEvent(convertBtn, 'click');
};
const onConvert = e => {
const input = document.querySelector('.input');
const output = document.querySelector('.output');
output.value = parseUnicodeString(input.value);
};
const parseUnicodeString = unicodeSring =>
unicodeSring.replace(/\\x([0-9a-f]{2})/ig, (match, codePoint) =>
String.fromCodePoint(parseInt(codePoint, 16)));
const triggerEvent = (el, eventName, data) => {
let event;
if (window.CustomEvent && typeof window.CustomEvent === 'function') {
event = new CustomEvent(eventName, {detail: data});
} else {
event = document.createEvent('CustomEvent');
event.initCustomEvent(eventName, true, true, data);
}
el.dispatchEvent(event);
};
main();
body,html{width:100%;height:100%;margin:0;padding:0;background:#000;color:#fff}body{display:flex;flex-direction:column}button{background:#c46;border:thin solid #d26;color:#eee;padding:.125em;font-weight:700;cursor:pointer}button:hover{background:#f47;color:#fff}textarea{flex:1;background:#222;color:#eee;resize:none;border:none;outline:0;padding:.25em}
<textarea class="input">\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3a\x61\x6c\x65\x72\x74\x28313\x29</textarea>
<button class="convert">Convert</button>
<textarea class="output">
</textarea>
推荐阅读
- pip - 如何在 pipit setup.cfg 中指定最低软件包版本
- c++ - ASIO 中协程之间的通信
- javascript - 由于高度为 0px,Instagram 嵌入未显示
- javascript - 如何检查javascript JSON数组中是否已经存在值?
- apache-spark - 如何将 GCP 私有 json 密钥作为字符串传递,而不是在 Apache Spark 中传递文件路径?
- java - Apache commons命令行执行方法在tomcat应用程序中运行时返回退出代码-1并抛出ExecuteException
- elasticsearch - 这个 Elasticache Redis cli 错误是什么意思?
- .net - 无法解析具有歧义表达式的表达式
- c# - Blazor - 登录时刷新导航菜单
- flask-sqlalchemy - 烧瓶:从自引用表中的父项获取所有项目:sqlalchemy.exc.ArgumentError:预期的映射实体或可选择/表作为连接目标