我在Chrome的控制台中输入了以下内容:
decodeURIComponent('a%AFc');
Run Code Online (Sandbox Code Playgroud)
a0xAFc它导致了一个URIError异常(格式错误的uri),而不是导致它.
我听过几个借口为什么这可能,但我不明白为什么?
decodeURIComponent()特别是该函数应该解码数据,而不是验证URI.
我只是用AJAX测试一些东西,如果我发出警报,我发现成功了
alert(decodeURI('%'));
Run Code Online (Sandbox Code Playgroud)
要么
alert(encodeURIComponent('%'));
Run Code Online (Sandbox Code Playgroud)
浏览器错误输出以下代码.
$.ajax({
type: "POST",
url: "some.php",
data: "",
success: function(html){
alert(decodeURIComponent('%'));
// alert(decodeURI('%'));
}
});
Run Code Online (Sandbox Code Playgroud)
如果我使用任何其他字符串,它的工作正常.
这是我错过的东西吗?
使用Express的URL参数功能时,似乎会自动解码参数.也就是说,百分比编码实体被解析为其正常形式. %20用空格代替.
但是,加号+不会替换为空格.这可能是因为Express在decodeURIComponent()内部使用,也没有+用空格替换加号.简单示例代码:
app.get('/:sourceFile', function (req, res, next) {
console.log(req.params.sourceFile);
});
Run Code Online (Sandbox Code Playgroud)
如果您要求/test%20test,那么您将test test进入控制台.如果您要求/test+test,那么您将test+test进入控制台.
有没有办法在Express 4中改变这种操作模式?这是一个错误吗?
我想在我的Lua(Luvit)项目中使用decodeURI或使用decodeURIComponentJavaScript .
JavaScript的:
decodeURI('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82')
// result: ??????
Run Code Online (Sandbox Code Playgroud)
很喜欢:
require('querystring').urldecode('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82')
-- result: '%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82'
Run Code Online (Sandbox Code Playgroud) 当我尝试使用decodeURLCompnent解码nodeJS中的下面的字符串时:
var decoded = decodeURI('Ulysses%20Guimar%C3%A3es%20-%20lado%20par');
console.log(decoded);
Run Code Online (Sandbox Code Playgroud)
我有
Ulysses Guimarães - lado par
Run Code Online (Sandbox Code Playgroud)
代替
Avenida Ulysses Guimarães - lado par
Run Code Online (Sandbox Code Playgroud)
但是当我在客户端(浏览器)上使用相同的代码时,我可以得到正确的字符'ã'.
有没有办法在节点脚本中从ã转换为 ã?
例如,如果使用decodeURI('%C4%97%')它会触发并出错(是的,这是一个错误,专门用于测试):
URIError: 格式错误的 URI 序列 ...('textarea#encode-url-result').val(decodeURI(jQuery('input#encode-url-input').va...
即使我把它放进去,try-catch它仍然会致命。有没有办法抓住它并显示警报?
更新:
这是我的代码,但我仍然在控制台中出现错误
try{
jQuery('a#encode-url-encode, a#encode-url-decode').click(function(){
if(jQuery('input#encode-url-input').val().length == 0)
showCustomAlert('<strong>Warning!</strong> Please enter value.');
var result = null;
if(jQuery(this).attr('id') == 'encode-url-encode')
result = encodeURI(jQuery('input#encode-url-input').val());
else if(jQuery(this).attr('id') == 'encode-url-decode')
result = decodeURI(jQuery('input#encode-url-input').val());
jQuery('textarea#encode-url-result').val(result);
});
}
catch(e){
alert(e);
}
Run Code Online (Sandbox Code Playgroud)