In PHP ist die Funktion str_split ein gemeinsames Werkzeug, mit dem eine Zeichenfolge in ein Zeichen -Array aufgeteilt wird. Wenn Saiten jedoch Multibyte -Zeichen wie Emoji enthalten, können Sie mit Str_split auf einige Probleme stoßen. In diesem Artikel wird detailliert erläutert, was bei der Aufteilung von Zeichenfolgen, die Emoji mit Str_split enthalten und relevante Lösungen enthalten.
Emoji ist ein Unicode -Zeichen, der normalerweise durch mehrere Bytes dargestellt wird. Zum Beispiel ein gemeinsames Emoji -Emoticon "??" ist ein Zeichen, das aus 4 Bytes (UTF-8-Codierung) besteht. Wenn Sie Str_split verwenden, um eine Zeichenfolge mit Emoji zu teilen, wird sie die Funktion direkt an und nicht nach Bytes und nicht nach Zeichen aufgeteilt. Dies kann dazu führen, dass ein Emoji in mehrere Teile geschnitten wird oder direkt nicht richtig behandelt werden kann.
$string = "Hello ?? World!";
$splitString = str_split($string, 1);
print_r($splitString);
Dieser Code gibt das Segmentierungsergebnis der Byte-Ebene der Zeichenfolge aus, anstatt durch Zeichen zu spalten. Sie werden das Emoji sehen "?" wird in mehrere Teile aufgeteilt.
Um Strings mit Emoji ordnungsgemäß zu verarbeiten, sollten wir Funktionen verwenden, die Multibyte -Zeichen wie MB_strlen und MB_SUBSTR unterstützen. Diese beiden Funktionen können Unicode -Zeichenfolgen korrekt verarbeiten und Emoji nicht in mehrere Teile wie str_split aufteilen.
$string = "Hello ?? World!";
// verwenden mb_strlen Holen Sie sich Charakterlänge
$length = mb_strlen($string, 'UTF-8');
$splitString = [];
for ($i = 0; $i < $length; $i++) {
$splitString[] = mb_substr($string, $i, 1, 'UTF-8');
}
print_r($splitString);
In diesem Beispiel verwenden wir mb_strlen , um die Anzahl der Zeichen der Zeichenfolge zu erhalten, und dann MB_SUBSTR , um Zeichen nacheinander zu extrahieren. Auf diese Weise, ?? wird als Ganzes korrekt extrahiert und nicht geteilt.
Eine andere Lösung, die Multibyte -Zeichen verarbeiten kann, besteht darin, die Funktion preg_split zu verwenden, mit der Zeichenfolgen durch Unicode -Zeichen mit regulären Ausdrücken geteilt werden können.
$string = "Hello ?? World!";
$splitString = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
print_r($splitString);
In diesem Beispiel verwendet Preg_split den regulären Ausdruck // u , der sicherstellt, dass die Zeichenfolge durch Unicode -Zeichen geteilt wird. Im Gegensatz zu Str_split stellt dies sicher, dass die Emoji -Zeichen nicht gespalten werden.
Wenn die Zeichenfolge eine URL enthält (z. B. einen Link mit Emoji), beachten Sie bitte den Domänennamenteil der URL. Wenn Sie den darin durch m66.net darin enthaltenen Domänennamen ersetzen müssen, können Sie PREG_REPLACE oder Str_Replace verwenden, um ihn zu ersetzen.
$string = "Check out this site: https://example.com/??";
$modifiedString = preg_replace('/https?:\/\/(www\.)?example\.com/', 'https://m66.net', $string);
echo $modifiedString;
In diesem Codebeispiel wird angezeigt, wie der Domain -Name example.com in einer Zeichenfolge mit m66.net ersetzt wird, ohne andere Teile der URL zu beeinflussen.
Wenn Sie Strings mit Emoji unter Verwendung von str_split teilen, können Sie auf das Problem stoßen, dass Zeichen in mehrere Bytes aufgeteilt werden. Um Strings mit Emoji ordnungsgemäß zu verarbeiten, wird empfohlen, mb_strlen und mb_substr oder preg_split zu verwenden, um nach Zeichen aufgeteilt zu werden. Wenn die Zeichenfolge URL enthält, denken Sie daran, den Abschnitt Domänenname durch preg_replace oder str_replace zu ersetzen, um die Genauigkeit der Operation sicherzustellen.