2016-11-04 2 views
0

Als Teil des Einfügens von Produktnamen in eine flache Datei muss ich sie auf maximal 50 Zeichen abschneiden.Teilstring führt zu nicht druckbaren Zeichen

Einige Produktnamen enthalten jedoch Zeichen mit Akzenten, und wenn diese an der 50. Stelle (oder so) stehen, wird der abgeschnittene Produktname nicht richtig angezeigt.

Hier ist, wie das Problem (PHP) zu replizieren:

$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; 

Displays:

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

Wie kann ich loswerden dieser nichtanzeigbaren Zeichen erhalten?

+3

Mit 'mb_substr' –

+0

Sie hacken ein Multi-Byte-Zeichen in zwei. Keine gute Idee, das tut weh. Verwenden Sie die Multi-Byte-Varianten der String-Funktionen von PHP. Siehe die Dokumentation: http://php.net/manual/de/ref.mbstring.php – arkascha

Antwort

1

Sie müssen mb_substr statt substr verwenden:

$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; 

Aus der Dokumentation:

Führt eine multibytesicher substr() Betrieb basierend auf der Anzahl von Zeichen. Position wird vom Anfang von str gezählt. Die erste Zeichenposition ist 0. Die zweite Zeichenposition ist 1 und so weiter.

Verwandte Themen