如何在输入时从utf-8编码转换为windows-1251



当用户在

字段中输入文本时,我想将utf-8编码转换为windows-1251例如,用户输入:Äèíóàáó

我想得到:Aeioaao

我用了一些地球符号,但我想找到一种正常的方法,我在网上找不到任何有效的方法。

我用的:

$(function(){
$('#txt').on('keyup paste change', function(){ 
var txt = $(this), val = txt.val();
val = val.replace(/[u00c4]/g, 'A').replace(/[u00e8]/g, 'e').replace(/[u00ed]/g, 'i').replace(/[u00f3]/g, 'o').replace(/[u00e0]/g, 'a').replace(/[u00e1]/g, 'a').replace(/[u00e7]/g, 'c');
txt.val(val);
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>paste: Äèíóàáó</p>
<input type="text" id="txt">

这对我很有帮助,因为它们以相同的方式使用相同的字符。但是如果它是新的,你需要添加它。

您应该使用NFKDnormalize字符串,然后使用regex来删除变音符组。

$(function() {
$('#txt').on('keyup paste change', function() {
var txt = $(this),
val = txt.val();
val = val
.normalize("NFKD")
.replace(/p{Diacritic}/gu, "")

txt.val(val);
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>paste: Äèíóàáó</p>
<input type="text" id="txt">


支持异常

如果你想要支持异常,你可以先将它们更改为唯一的东西,然后删除变音符号,然后恢复异常。

之类的

const accentExceptions = [
{ char: 'Ä', uuid: crypto.randomUUID() }, 
{ char: 'ä', uuid: crypto.randomUUID() },
// crypto.randomUUID is not supported by all browsers so you 
// might want to look for an alternative to creating some unique
// text/hash for each accented character
];
function encodeExceptions(value = '') {
let encoded = value;
accentExceptions.forEach(({ char, uuid }) => {
encoded = encoded.replace(new RegExp(char, 'g'), uuid);
});
return encoded;
}
function decodeExceptions(value = '') {
let decoded = value;
accentExceptions.forEach(({ char, uuid }) => {
decoded = decoded.replace(new RegExp(uuid, 'g'), char);
});
return decoded;
}
function removeDiacritics(value = '') {
return value
.normalize("NFKD")
.replace(/p{Diacritic}/gu, "")
}
$(function() {
$('#txt').on('keyup paste change', function() {
var txt = $(this),
val = txt.val();
val = encodeExceptions(val);
val = removeDiacritics(val);
val = decodeExceptions(val);
txt.val(val);
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>paste: Äèíóàáó</p>
<input type="text" id="txt">

最新更新