表单中如果有多种语言和文字,如何处理可能的编码问题?
处理HTML表单中的编码问题的最好方式,是以UTF-8编码提供所有页面。UTF-8编码可显示最广泛的语言属性。浏览器会返回与表单网页中包含的编码格式相同的格式数据,因此使用者可以以其熟悉的任何语言和脚本填写表单数据。
以下是确保成功执行过程的必要步骤。首先,需要告知浏览器表单页面使用UTF-8编码。有多种不同的方法可以告知浏览器您当前页面的编码。不管在哪种情况下,告知浏览器表单页面的编码都极为重要,特别是在表单页面只含有US-ASCII编码字符的情况下,因为使用者可以输入非US-ASCII编码的字符。
其次,脚本在接收格式数据时,将会核对返回数据是否确实使用了UTF-8编码,以应付有可能出现的错误,例如使用者于填写表单时改变了编码。UTF-8编码拥有其他编码所没有的非常具体的字节模式,这使检验成为可能。如果接收到非UTF-8编码的数据,浏览器将返回错误信息给使用者。
例如,在使用Perl时,可用以下的正则表达式来测试页面是否使用了UTF-8编码:
$field =~ /\A( [\x00-\x7F] # ASCII | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 )*\z/x;
以上表达式可转换成其他编程语言。这样就能处理各类问题,例如过长的错误编码以及非法的代理(surrogate)使用。$field
属于UTF-8编码时就会顺利返回,否则失败。
我们可以通过添加应用程序相关的限制来定制这个正则表达式。例如,我们可以把[\x00-\x7F]
替换成[\x09\x0A\x0D\x20-\x7E]
来排除很多控制字符。
相关链接:制作网页