cometlj / hexo-translate-title

使用Google翻译,百度翻译和有道翻译将Hexo文章中的汉字标题转成英文标题
https://cometlj.github.io
Other
43 stars 17 forks source link

解决文章标题中包含+、/、&等特殊字符时,使用google translate 会报error 403的问题 #19

Closed huanGG closed 4 years ago

huanGG commented 4 years ago

issue 中提到的,本人也遇到了文章标题中含特殊字符时,使用google translate 返回状态码错误,同时不能generate html文件。

原因是调用 google translate api 时对文章标题编码使用的是 encodeURI 方法,该方法中将 * ; , / ? : @ & = + $ 等字符视作保留字符,不进行编码,因此会被google translate 拒绝访问。

解决办法是使用 encodeURIComponent 代替 encodeURI,前者会对除字母、数字、(、)、.、!、~、*、'、-和 _ 之外的所有字符进行转义。替换后问题解决,可以正常使用google translate翻译标题,并生成html 文件。

encodeURI 和 encodeURIComponent 的区别在于前者被设计来用于对完整URL进行URL Encode,URL中的功能字符比如&, ?, /, =等等不会被转义;而后者被设计来对URL中的某个值进行转义,会把这些功能字符也进行转义。 translate_title 作为调用google translate api 时 query 的一部分,此处使用 encodeURIComponent 也更合理。