我在Perl v5.8.5中使用substr
时试图找出问题。这是一个示例字符串:
טובבגןUTF-8示例וובבはははにほξεσκεπάζωff
if (length($hit->{post_title}) > 60) {
$hit->{post_title} = substr($hit->{post_title},0,60);
$hit->{post_title} .= "...";
}
似乎被修剪为:
UTF-8示例וובבκκ<<<
在代码中,我看到一条关于宽字符的消息。我想知道是否substr
可能会以某种方式将这个词减半?如果我删除代码的substr()
部分,那么字符串显示正常。
我以前从未遇到过utf8。我们需要用阿拉伯字符做一些特别的事吗?
更新:如果我检查字符串之前和之后的长度,似乎会发生一些时髦的事情:
测试:UTF-8示例עץטובבגןशろはにほξεσκεπάζω
长度:63 长度:67后
我只是不确定是什么! FWIW,我也在剧本的标题中使用它:
use utf8;
谢谢!
答案 0 :(得分:2)
通常情况下,我现在找到了解决办法。它不是非常漂亮,但它似乎工作
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年代)软件,而且所有者(慈善机构)并不想升级到更好的论坛软件。我一直试图说服他一段时间,但这是一个禁忌。它将达到一个我无法保持&#34;更新&#34;对他来说,因为代码是开箱即用的混乱。无论如何,这似乎是现在赢得的一场战斗:)