php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Sonderzeichen nicht anzeigen


 
nate10
11-11-2005, 11:09 
 
Hallo welche Funkion gibt es um in einem Text alle Sonderzeichen nicht anzuzeigen, bzw. diese zu finden und dann in der Ausgabe nicht mit anzuzeigen. Oder muss man dass irgendwie umschreiben?

 
Kropff
11-11-2005, 11:34 
 
wenn du z.b. aus einen ä ein ae machen willst dann nimm str_replace

wenn du aus einen ä ein ä machen willst, dann nimm htmlentities

gruß
peter

Sonderzeichen korrigiert ;)

 
nate10
11-11-2005, 11:39 
 
nein ich meinte jetzt keine umlaute sondern sonderzeichen wie ; +-...

 
Kropff
11-11-2005, 11:43 
 
dann hilft dir preg_replace (http://www.php-resource.de/manual.php?p=function.preg-replace)
peter

 
nate10
11-11-2005, 12:07 
 
habs versucht_:


$text = 'Dies ist Ein einfacher Test, Es geht weiter Hallo!';


$var = preg_replace('/\s\s+/', ',', $text);

print_r($var);




aber funktioniert nicht, die , werden weiter angezeigt und wie kann ich denn eigentlich alle sonderzeichen nicht anzeigen?

 
mrhappiness
11-11-2005, 12:09 
 
Warum \s und nicht \W?

 
hhcm
11-11-2005, 12:13 
 
Versuchs mal damit


$var = preg_replace(' /[^A-Za-z0-9]/', '', $text);



Und dann darfst du noch suchen wie deine Leerzeichen drin bleiben :)

 
nate10
11-11-2005, 12:29 
 
super dass klappt wunderbar, jetzt hab ich nur noch eine frage
wie formuliere ich es wenn alle sonderzeichen ersetzt werden sollen also:

.;+-*?) usw

 
nate10
11-11-2005, 13:21 
 
noch eine kleine frage, wie realisiere ich es dass alle wörter ab einer länge von 4 zeichen ausgegeben werden?
habs jetzt so versucht:


$text = 'Dies ist Ein einfacher Test, Es geht weiter Hallo!';
$erg = explode(" ", $text);
$var = preg_replace(' /[^A-Za-z0-9]/', '', $erg);



while (list ($key, $val) = each ($erg)) {
if (strlen($val) > 4 ) {

echo '<pre>';
print_r($var);
echo '</pre>';
}
}




aber dass mit den 4 zeichen funktioniert noch nicht

 
xManUx
11-11-2005, 13:27 
 
So wie du es im Moment hast, werden Wörter ab einer Länge von 5 Zeichen angezeigt.

Entweder: strlen($val) >= 4
oder: strlen($val) > 3

 
nate10
11-11-2005, 14:07 
 
ok dass stimmt zwar war aber nicht das entscheidende problem sondern der ganze code funktioniert noch nicht so dass alle wörter angezeigt werden.

 
mrhappiness
11-11-2005, 14:08 
 
Sondern?

 
nate10
11-11-2005, 14:17 
 
es werden auch wöter mit nur 2 zeichen angezigt dass sollte nicht sein

 
mrhappiness
11-11-2005, 14:28 
 
Du gibst ja immer $var aus

/*
each($var) und nicht each($erg), da
in $var keine "Sonderzeichen" mehr stehen
*/
while (list ($key, $val) = each ($var)) {
if (strlen($val) > 4 ) {

echo '<pre>';
echo $val;
echo '</pre>';
}
}

 
nate10
11-11-2005, 14:53 
 
gut danke nun wollte ich bloß noch folgenden anweisung mit einbauen:




preg_match_all('#\b[A-Z]+\b#', $erg, $treffer);



um den ersten Buchstaben zu überprüfen und nur alle Hauptwörter anzuzeigen, wie kann ich dies realisieren?

 
nate10
11-11-2005, 15:42 
 
habs jetzt so versucht:





$text = 'Dies, sollte oh ha ja ja Meine Herren nicht verwirren!!!';
$erg = explode(" ", $text);
$var = preg_replace(' /[^A-Za-z0-9]/', '', $erg);
$pos = strpos ($text, preg_match_all('#b[A-Z]+b#', $text, $treffer));
print_r($pos);




führt aber zu diesem ergebnis, bzw ausgabe:

sollte
Meine
Herren
nicht
verwirren

es sollte aber nur die Worte:


Meine
Herren

angezeigt werden.

was hab ich nicht beachtet?

 
Spliffster
11-11-2005, 15:49 
 
$pos = strpos ($text, preg_match_all('#b^[A-Z]+b#', $text, $treffer));



versuch mal das

 
mrhappiness
11-11-2005, 15:49 
 
Lass uns spielen: Warum gibst du $pos aus?

Ach ja: Das print_r in dem Code ist die einzige Ausgabe und da kommt sicherlich nicht das von dir Gepostete raus

 
nate10
11-11-2005, 16:15 
 
also noch mal hier der komplette code:



$text = 'Dies, sollte oh ha ja ja hey Meine Herren!! nicht verwirren';
$erg = explode(" ", $text);
//$var = preg_replace(' /[^A-Za-z0-9]/', '', $erg);
$var = preg_replace('/[A-Z]+.[a-z]+/', '', $erg);
//$pos = strpos ($text, preg_match_all('#b^[A-Z]+b#', $text, $treffer));
print_r($var);
//$pos = strpos ($text, preg_match_all('#b[A-Z]+b#', $text, $treffer));




while (list ($key, $val) = each ($var)) {
if (strlen($val) > 4 ) {

echo '<pre>';
print_r($val);
echo '</pre>';
}
}





führt zu:

Array ( [0] => , [1] => sollte [2] => oh [3] => ha [4] => ja [5] => ja [6] => hey [7] => [8] => !! [9] => nicht [10] => verwirren )
sollte
nicht
verwirren

die problemstellung hab ich ja schon beschrieben!

 
mrhappiness
11-11-2005, 16:32 
 
Du ersetzt alles, was mit Großbuchstaben anfängt und mit Buchstaben weitergeht durch nichts.

Danach gibst du aus, was noch übrig ist.

Danach gibst du nur das aus, was länger als 4 Zeichen ist.

Irgendwie scheinst du ganz andere Sachen zu machen als du machen zu wollen sagst

 
nate10
11-11-2005, 16:44 
 
$text = 'Dies, sollte oh ha ja ja hey Meine Herren!! nicht verwirren';
$erg = explode(" ", $text);
//$var = preg_replace(' /[^A-Za-z0-9]/', '', $erg);
$var = preg_match_all('/[A-Z]+.[a-z]+/', '', $erg);
//$pos = strpos ($text, preg_match_all('#b^[A-Z]+b#', $text, $treffer));
//print_r($pos);
//$pos = strpos ($text, preg_match_all('#b[A-Z]+b#', $text, $treffer));


while (list ($key, $val) = each ($var)) {
if (strlen($val) > 4 ) {

echo '<pre>';
print_r($val);
echo '</pre>';
}
}




lustig ich auch turisch man...
aber scherz bei seite, ich habe es falsch herum versucht aber so kann dass natürlich nicht angezeigt werde, aber wenn ich es mit :

$var = preg_match_all('/[A-Z]+.[a-z]+/', '', $erg);

versuche erscheint:

Warning: Variable passed to each() is not an array or object in D:\Compendium\gruppen\internet\webs\test\test.php on line 17
$var = preg_replace(' /[A-Z].[a-z]+/', '', $erg);

 
nate10
14-11-2005, 10:34 
 
ok da mein neues Thema verschoben wurde versuch ich es nochmal im original thread:
problem sind wohl die regulären Ausdrücken.
hier mein versuchter Code:



PHP:--------------------------------------------------------------------------------
$text = 'Dies, sollte oh ha ja ja hey Meine Herren!! nicht verwirren';
$erg = explode(" ", $text);
$var = preg_replace(' /[^A-Za-z0-9]/', '', $erg);
//$var = preg_match_all('/[A-Z]+.[a-z]+/', '', $erg);



while (list ($key, $val) = each ($var)) {
if (strlen($val) >=4 ) {

echo '<pre>';
print_r($val);
echo '</pre>';
}
}

--------------------------------------------------------------------------------



ich hab den preg_match_all bereich aukommentiert weil ich es nicht hingebracht hab, mit preg_replace funktionierts schon, allerdings bekomme ich auch die klein geschriebenen, wenn ich es umdrehe:


PHP:--------------------------------------------------------------------------------
//$var = preg_replace(' /[^A-Za-z0-9]/', '', $erg);
$var = preg_match_all('/[A-Z]+.[a-z]+/', '', $erg);

--------------------------------------------------------------------------------


erscheint diese Fehlermeldung:
Variable passed to each() is not an array or object

 
nate10
14-11-2005, 10:46 
 
@wahsaga

sag mal bürschchen, ich würde mal ein wenig langsam mit den gewählten ausdrücken hier umgehen, ich bin neu hier und nur auf hilfe aus, wenn dass zu viel verlangt ist dann wähle ich eben andere foren aus, leider bin ich noch kein solcher profi wie du bürschchen...

man kann dass auch normal posten, dann werde ich mich auch an diese regeln halten, habe ich kein problem mit, aber diese dumme anmache finde ich maßlos übertrieben!!!


:nervkopf:


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:15 Uhr.