我试图找出在 Perl v5.8.5 中使用 substr
时出现的问题。这是一个示例字符串:
טוב בגןUTF-8 Examples עץ טוב בגן いろはにほξεσκεπάζω ff
if (length($hit->{post_title}) > 60) {
$hit->{post_title} = substr($hit->{post_title},0,60);
$hit->{post_title} .= "...";
}
似乎被修剪成:
UTF-8 Examples עץ טוב בגן いろはにほξεσκε�...
在代码中,我看到一条关于宽字符的消息。我想知道 substr
是否以某种方式将这个词减半?如果我删除代码的 substr()
部分,则字符串会正常显示。
我以前从未遇到过使用 utf8 的情况。我们需要对阿拉伯字符做一些特别的事情吗?
更新:如果我检查前后字符串的长度,似乎确实发生了一些奇怪的事情:
TEST: UTF-8 Examples עץ טוב בגן いろはにほξεσκεπάζω
LENGTH: 63 LENGTH: 67 AFTER
我只是不确定是什么! FWIW,我还在脚本的标题中使用了它:
use utf8;
谢谢!
最佳答案
通常,我现在找到了解决方法。它不是很漂亮,但它似乎有效
use Unicode::String qw(utf8);
$us = utf8($hit->{post_title});
if ($us->length > 30) {
$hit->{post_title} = $us->substr(0,30);
}
所以基本上将 utf8 字符串粘贴到 Unicode::String 中,然后如果它超过给定的大小,则将其修剪并传回 $hit->{post_title}
。它不漂亮,但可以完成工作。
不幸的是,这是一个过时的(2000 年代!)软件,所有者(慈善机构)不想升级到更好的论坛软件。我一直试图说服他一段时间,但这是不行的。它将达到我无法继续为他“更新”它的地步,因为即使开箱即用,代码也是如此困惑。无论如何,这似乎是一场胜利的战斗:)
关于perl - Perl 中的 Substr,将 utf8 字符切成两半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40649259/