子字符串导致不可打印的字符

时间:2016-11-04 10:06:52

标签: php substring non-ascii-characters

作为在平面文件中插入产品名称的一部分,我必须将它们最多截断为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�

如何摆脱这些无法显示的角色?

1 个答案:

答案 0 :(得分: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()操作   字符。位置从str的开头计算。第一   字符的位置为0.第二个字符位置为1,依此类推。