2016-11-04 46 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,依此類推。