gpt4 book ai didi

ajax - 如何通过 Ajax 或 CGI 获取 Perl Unicode 字符串输入的长度?

转载 作者:行者123 更新时间:2023-12-04 22:08:25 24 4
gpt4 key购买 nike

好的,这应该很简单,但是我已经到处寻找答案,还阅读了以下主题:
How do I find the length of a Unicode string in Perl?

它对我没有帮助。我知道如何让 Perl 将字符串常量视为 UTF-8 并返回正确数量的字符(而不是字节),但不知何故,当 Perl 通过我的 AJAX 调用接收字符串时它不起作用。

下面,我用 unicode 发布三个希腊字母 Alpha、Beta 和 Omega。 Perl 告诉我长度是 6(字节),而它应该只告诉我 3(字符)。如何获得正确的字符数?

#!/usr/bin/perl
use strict;

if ($ENV{CONTENT_LENGTH}) {
binmode (STDIN, ":utf8");
read (STDIN, $_, $ENV{CONTENT_LENGTH});
s{%([a-fA-F0-9]{2})}{ pack ('C', hex ($1)) }eg;
print "Content-Type: text/html; charset=UTF-8\n\nReceived: $_ (".length ($_)." chars)";
exit;
}

print "Content-Type: text/html; charset=UTF-8\n\n";
print qq[<html><head><script>
var oRequest;
function MakeRequest () {
oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = zxResponse;
oRequest.open ('POST', '/test/unicode.cgi', true);
oRequest.send (encodeURIComponent (document.oForm.oInput.value));
}
function zxResponse () {
if (oRequest.readyState==4 && oRequest.status==200) {
alert (oRequest.responseText);
}
}
</script></head><body>
<form name="oForm" method="POST">
<input type="text" name="oInput" value="&#x03B1;&#x03B2;&#x03A9;">
<input type="button" value="Ajax Submit" onClick="MakeRequest();">
</form>
</body></html>
];

顺便说一句,代码是有意简化的(我知道如何进行跨浏览器 AJAX 调用等),并且不能选择使用 CGI Perl 模块。

最佳答案

在调用 length 之前解码此字符串.例如:

use Encode;

my $utf_string = decode_utf8($_); ## parse string to find utf8 octets
print length($utf_string);
来自 encode manual :

$string = decode_utf8($octets [, CHECK]);

equivalent to $string = decode("utf8", $octets [, CHECK]) . The sequence of octets represented by $octets is decoded from UTF-8 into a sequence of logical characters. Not all sequences of octets form valid UTF-8 encodings, so it is possible for this call to fail. For CHECK, see Handling Malformed Data.

关于ajax - 如何通过 Ajax 或 CGI 获取 Perl Unicode 字符串输入的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com