Perl - 验证网页表单中的汉字输入?

Posted

技术标签:

【中文标题】Perl - 验证网页表单中的汉字输入?【英文标题】:Perl - Validate Chinese character input from web page form? 【发布时间】:2018-08-24 20:31:35 【问题描述】:

我的 Perl 脚本接受并处理来自网页表单中文本字段的输入。它是为网页的英文版编写的,效果很好。

还有一个中文版的页面(一个单独的页面,不是同一页面上的两种语言),现在我需要我的脚本来处理它。此页面上的用户输入应为中文。

预计需要在 UTF-8 中工作,我补充说

use utf8;

这在英文页面上仍然可以正常工作。

但是,例如,为了定义一个使用中文字符进行比较的字符串变量,我必须使用 utf-8 编码保存 Perl 脚本本身。一旦我这样做,我就会得到可怕的 500 服务器错误。

很明显,我要解决这个问题,任何有用的方向将不胜感激/

谢谢。

编辑 - 请参阅下面我的澄清帖子。

【问题讨论】:

use utf8 只会告诉 Perl 脚本中的文本是 UTF-8 编码的。为了帮助你,你需要展示你的一些代码。中文页面的编码是什么?您如何将表单输入从表单获取到脚本?你的服务器软件是什么?脚本如何与之交互? 您需要显示您的 500 错误详细信息 感谢您的反馈。我想我误导了人们。请参阅下面的说明。 【参考方案1】:

正确处理utf8

use strict; use warnings;

use utf8;
use open(IO => ':encoding(utf8)');
binmode $_, ":utf8" for qw/STDOUT STDIN STDERR/;

open(my $fh, '<:utf8', '/file/path'); # if you need a file-handle

# code.....

检查

why-does-modern-perl-avoid-utf-8-by-default perluniintro

【讨论】:

感谢您的回复,但我认为我误导了这个问题。你能在下面看到我的澄清吗?谢谢。 您的回复让我想到了大致正确的方向并进行了更多研究。谢谢。还没有完全解决,但我会开始一个新的 Q,因为这个问题不是真的。【参考方案2】:

很抱歉 - 我认为我包含太多信息而未能很好地表达我的问题。

问题是 - 如果我将脚本保存为 ANSI 格式并将其上传到服务器,它对于英文页面就可以正常工作。本来想在脚本中使用汉字,我把它保存为UTF-8格式并重新上传,突然英文页面抛出500。

我使用 Hello World 脚本进行了测试:

#!/usr/bin/perl -T
use strict;
use warnings;

print "Content-type: text/html\n\n";

print "Hello, world!\n";

保存为 ANSI 时工作正常 - 保存为 UTF8 时失败 500。

【讨论】:

以上是关于Perl - 验证网页表单中的汉字输入?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript ---[表单验证,正则表达式]

PHP输入验证安全漏洞预警

Laravel:验证表单中的名称输入

通过 AJAX 验证 Laravel 表单中的文件输入

在 laravel 5 中的表单请求验证后传递旧输入

使用 AngularJS 比较表单验证中的两个输入值