[php] String Nach Groesse Nicht Nach Laenge Kurzen
#1 _PelzigesWaldtier_
geschrieben 02. April 2005 - 01:31
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
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
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
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
#6
geschrieben 10. Juni 2005 - 10:39
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
// 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)
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 →

Hilfe
Neues Thema
Antworten
Nach oben



