我正在尝试解决使用时的问题substr
在 Perl v5.8.5 中。这是一个示例字符串:
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;
Thanks!
通常,我现在已经找到了解决方法。它不是非常漂亮,但似乎有效
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 年!)软件,所有者(慈善机构)不想升级到更好的论坛软件。我已经尝试说服他一段时间了,但没成功。到了我无法继续为他“更新”的地步,因为即使开箱即用的代码也很混乱。不管怎样,这似乎是一场胜利了:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)