Closed huanGG closed 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 也更合理。
如 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 也更合理。