mb_convert_encoding为UTF7字符串提供了iconv以外的其他结果
mb_convert_encoding gives other result than iconv for UTF7 String
InputString:
$value = "ACM=1,1+eval(1+name+(+ACM-1),ACM)";
使用mb_convert_encoding 的方法
mb_convert_encoding($value, 'UTF-8', 'UTF-7');
使用iconv 的方法
iconv("utf-7", "utf-8//IGNORE", $value);
结果不同,对于mb_convert_encoding
ACM=1,1競(1鶩(#1),ACM)
用于iconv
ACM=1,1競뗺皦(#1),ACM)
我的问题是,我想运行一个在JS中实现的PHP-IDS离心机,在那里我没有mb函数。这个字符串是PHP-IDS的一个测试用例,我无法获得相同的结果。
有人知道吗,我是如何用js得到与mb相同的结果的?还是mb中的bug?
在阅读了RFC 2152之后,在我看来,mb_convert_encoding在处理格式错误的输入方面非常严格,iconv正在努力进行清理。但我想我得到了被通缉的行为:
function convertUTF7toUTF8(string) {
var b64Token = /'+([a-z'd'/+]*'-?)/gi,
hex, len, replace, i;
return string.replace(b64Token, function(match, grp) {
hex = Buffer(grp, 'base64');
len = hex.length >> 1 << 1;
replace = '';
i = 1;
for(i; i < len; i = i + 2) {
replace += String.fromCharCode(hex.readUInt16BE(i - 1));
}
return replace;
});
}
最小化:
function convertUTF7toUTF81(s){return s.replace(/'+([a-z'd'/+]*'-?)/gi,function(m,a){var i=0,c='',h=Buffer(a,'base64'),l=h.length>>1<<1-1;while(i<l)c+=String.fromCharCode(h.readUInt16BE(i++*2));return c})};
相关文章:
- 如何添加浮动和非浮动,其他
- 与其他库的jQuery.noConflict()
- 播放当前视频时如何停止其他视频?JavaScript
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 除修剪外的其他功能
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- Array.length似乎不起作用;console.log则显示其他情况
- 如何消除代码中的未定义和其他问题
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- Jquery未定义函数正在停止其他操作
- 如何将我的javascript库公开给其他客户端使用
- Javascript阻止其他Javascript代码
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- 如何“;过滤器”;或者以其他方式重构该数据
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- mb_convert_encoding为UTF7字符串提供了iconv以外的其他结果
- 如何使用nodejs iconv模块(或其他解决方案)在nodejs javascript中将字符编码从CP932转换为