编码和解码字符串并不像我想的那么容易。
原始字符串如下:
at the end of → al término de • después de
经过PHP base64编码(使用了3次)后,它看起来有所不同:
VUVkSksxbFlVV2RrUjJoc1NVZFdkVnBEUW5aYWFuZDJXV28wWnpSdllWTkpSMFp6U1VoVVJIRllTblJoVnpWMlNVZFNiRWxQUzBGdmFVSnJXbGhPZDJSalQzQmplVUpyV2xSNGQxQm5QVDA9
当尝试使用JS window.atob()解码字符串时,结果是这样的:
at the end of â al término de ⢠después de
UTF-8字符显示不正确。我应该使用什么功能来解决此问题?
答案 0 :(得分:1)
尝试
let decodedString = decodeURIComponent(escape(window.atob(yourString)))
答案 1 :(得分:0)
发生的情况是JavaScript不允许 Latin1 范围以外的字符执行该操作,您可以执行以下操作:
let str = 'at the end of → at the end of • after';
btoa(unescape(encodeURIComponent(str)))
// output: YXQgdGhlIGVuZCBvZiDihpIgYXQgdGhlIGVuZCBvZiDigKIgYWZ0ZXI=
此代码会将字符串正确地(从javascript)转换为base64,从PHP您可以很好地对其进行解码,现在的问题是JavaScript无法解码它,因为它将其解释为语法错误(尽管已被编码),因此它也对您不起作用。