Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Abfangen chinesischer und englischer String-Operationen
Ich bin heute auf ein solches Problem gestoßen. Ich glaube, jeder ist darauf gestoßen. Wenn der Benutzername zu lang ist, wird er abgefangen und als ... angezeigt. Unsere Anforderungen sind ähnlich wie bei Sina Weibo. Wenn es 5 Ziffern überschreitet, werden 4 chinesische Zeichen angezeigt. Wie wir alle wissen, belegt ein chinesisches Zeichen zwei englische Positionen beim Satz. Daher müssen analog zu oben maximal 10 Ziffern angezeigt werden.
Die im Internet gefundene Lösung ist nicht sehr gut, deshalb habe ich selbst eine geschrieben. Ich habe sie in den Helfer gelegt. Reden wir nicht über die Ideen, sondern gehen wir direkt zum Code über.
<?php class Zend_View_Helper_UserName { public function userName($userName, $length) { $retUserName = ''; $position = 0; $count = 1; while ($count <= $length) { $subStr = mb_substr($userName, $position, 1, 'UTF-8'); if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u", $subStr)) { $count += 2; } else { $count++; } $position++; $retUserName .= $subStr; } $retUserNameLength = mb_strlen($retUserName); $userNameLength = mb_strlen($userName) ; if ($retUserNameLength >= $userNameLength - 1 && $retUserNameLength <= $userNameLength) { $retUserName = $userName; } else { $retUserName .= '...'; } return $retUserName; } }
Bei dieser Verwendung können Sie den Namen leicht abfangen. Und es ist sowohl für Chinesisch als auch für Englisch geeignet. Der Nachteil besteht darin, dass es möglicherweise einige Ressourcen verbraucht als Funktionen wie Substr.