Moin,
ich suche einen Weg, mit dem ich einen String zurechtschneiden kann. Normalerweise benutze ich dazu substr. Nur moechte ich nicht nach Laenge sondern nach Groesse schneiden. Ich moechte also beispielsweise alles von Byte 0 bis Byte 10 zurueckgeliefert haben. Das koennen unterscheidlich viele Zeichen sein. substr hilft hier also nicht.
Weiss da jemand einen Weg / Funktion?
Viele Gruesse,
PelzigesWaldtier
Seite 1 von 1
[php] String Nach Groesse Nicht Nach Laenge Kurzen
Anzeige
#2
geschrieben 10. Juni 2005 - 07:55
Also ich hab mal gelernt, dass ein Zeichen mit einem Byte codiert wird?! Deswegen ist ja ein char=1Byte. Soweit ich weis, sogar systemunabhängig.
#3
geschrieben 10. Juni 2005 - 08:30
Bei UTF-8 zum Beispiel kann es aber auch anders sein.
Hier mal ein Code der auch im Handbuch steht, vielleicht hilft das (Edit: Das tut es glaube ich nicht, guck mal weiter unten).
Hier mal ein Code der auch im Handbuch steht, vielleicht hilft das (Edit: Das tut es glaube ich nicht, guck mal weiter unten).
<?php // String intercept By Bleakwind At http://www.weaverdream.com // utf-8:$byte=3 | gb2312:$byte=2 | big5:$byte=2 function bite_str($string, $start, $len, $byte=3) { $str = ""; $count = 0; $str_len = strlen($string); for ($i=0; $i<$str_len; $i++) { if (($count+1-$start)>$len) { $str .= "..."; break; } elseif ((ord(substr($string,$i,1)) <= 128) && ($count < $start)) { $count++; } elseif ((ord(substr($string,$i,1)) > 128) && ($count < $start)) { $count = $count+2; $i = $i+$byte-1; } elseif ((ord(substr($string,$i,1)) <= 128) && ($count >= $start)) { $str .= substr($string,$i,1); $count++; } elseif ((ord(substr($string,$i,1)) > 128) && ($count >= $start)) { $str .= substr($string,$i,$byte); $count = $count+2; $i = $i+$byte-1; } } return $str; } // Test $str = "123456¶ז½ڱ23456ז·23456½؈¡º¯ʽ"; for($i=0;$i<30;$i++){ echo "<br>".bite_str($str,$i,20); } ?>
Dieser Beitrag wurde von Floele bearbeitet: 10. Juni 2005 - 11:36
#4
geschrieben 10. Juni 2005 - 10:01
Zitat
// utf-8:$byte=3 | gb2312:$byte=2 | big5:$byte=2
Wie in dem Kommentar steht wird utf-8 mit 3byte kodiert. Ich bin von normalem ascii ausgegangen. >> http://www.miniuri.de/1d7922 punkt 5.5.6
Utf8 codiert ja ascii zeichen mit ascii zeichen. Normalerweise 2 oder 3 Byte. Aber wenn du weist welche Zeichencodierung verwendet wird, sind halt 2 oder 3 byte ein Zeichen.
#5
geschrieben 10. Juni 2005 - 10:26
Wenn das Waldtier von ASCII ausgegangen wäre, hätte er die Frage bestimmt nicht gestellt.
#6
geschrieben 10. Juni 2005 - 10:39
Wer weiß...
Im Grunde ist die Zeichenkodierung ja nur dafür relevant, um zu wissen, mit wievielen bytes ein Zeichenkodiert wird. Hier geht es ja nicht um den Inhalt sondern nur um die Länge. Wenn er weiß: 2bytes/Zeichen kann er mit substr ja auf 5 Zeichen kürzen, um auf 10 bytes zu kommen.
Im Grunde ist die Zeichenkodierung ja nur dafür relevant, um zu wissen, mit wievielen bytes ein Zeichenkodiert wird. Hier geht es ja nicht um den Inhalt sondern nur um die Länge. Wenn er weiß: 2bytes/Zeichen kann er mit substr ja auf 5 Zeichen kürzen, um auf 10 bytes zu kommen.
#7
geschrieben 10. Juni 2005 - 11:25
Hm, ich muss grade feststellen, dass die Funktion mit dem was du haben möchtest gar nichts zu tun hat. Probiere mal diese selbstgeschriebene Funktion (ich bin mir keinesfalls sicher, dass das was ich da gemacht habe so richtig ist, aber es hat jedenfalls in meinem Test funktioniert):
// als UTF-8 speichern, damit das Ü zwei Bytes bekommt. $string = 'aÜbcde'; function sub_byte($string,$start = 0,$size = 0) { $new_string = ''; for($i = $start; $i < strlen($string);$i++) { $bytes = strlen(bin2hex($string{$i}))/2; if($size-$bytes >= 0) { $new_string .= $string{$i}; $size -= $bytes; } else break; } return $new_string; } echo sub_byte($string,0,4); // gibt die ersten 3 Zeichen aus
Dieser Beitrag wurde von Floele bearbeitet: 10. Juni 2005 - 14:40
#8 _PelzigesWaldtier_
geschrieben 10. Juni 2005 - 16:49
Zitat (Floele: 10.06.2005, 04:25)
Hm, ich muss grade feststellen, dass die Funktion mit dem was du haben möchtest gar nichts zu tun hat. Probiere mal diese selbstgeschriebene Funktion (ich bin mir keinesfalls sicher, dass das was ich da gemacht habe so richtig ist, aber es hat jedenfalls in meinem Test funktioniert)<{POST_SNAPBACK}>
Ja, so klappt es, Danke. Vielen Dank auch an alle anderen.
Gruesse,
Das Waldtier
- ← Php-aufbauart Beim Programmieren
- Skript/Web-Programmierung
- Rss Builder -> Feeds In Die Seite Einfügen →
Thema verteilen:
Seite 1 von 1