2016-11-04 42 views
0

作为在平面文件中插入产品名称的一部分,我必须将它们截断为最多50个字符。子字符串导致不可打印字符

但是,某些产品名称包含具有重音符号的字符,如果这些产品名称位于第50位(左右),则截断的产品名称无法正确显示。

这里是如何复制的问题(PHP):

$tmp = "Kaspersky Anti-Virus 2015 (Renovación) Suscripción Anual 3 PC"; 
$xxx = substr(trim($tmp), 0, 50); 

echo $tmp . PHP_EOL; 
echo $xxx . PHP_EOL; 

显示:

Kaspersky Anti-Virus 2015 (Renovación) Suscripción Anual 3 PC 
Kaspersky Anti-Virus 2015 (Renovación) Suscripci� 

我怎样才能摆脱这些显示的字符?

+3

用'mb_substr' –

+0

将多字节字符切成两半。不是一个好主意,那很伤人。使用php的字符串函数的多字节变体。请参阅文档:http://php.net/manual/de/ref.mbstring.php – arkascha

回答

1

您需要使用mb_substr而不是substr

$tmp = "Kaspersky Anti-Virus 2015 (Renovación) Suscripción Anual 3 PC"; 
$xxx = mb_substr(trim($tmp), 0, 50); 

echo $tmp . PHP_EOL; 
echo $xxx . PHP_EOL; 

从文档:

执行的基础上 字符数多字节安全SUBSTR()操作。头寸从头开始计算。第一个 字符的位置是0.第二个字符的位置是1,依此类推。