Die dritte Lektion: Strings und Arrays

tempa wrote this 13:25:

Die Variablentype String (auf deutsch: Zeichenkette) haben wir bereits kennengelernt und eingesetzt. Schauen wir uns den Variablentyp jetzt etwas genauer an. Strings werden mit Anführungszeichen eingeleitet. Doppelte Anführungszeichen werden auf PHP-Code in der Zeichenkette (string) hin untersucht. In Zeichenketten können Variablen und Anweisungen vorkommen. Wenn Steuerzeichen in einer Zeichenkette vorkommen, die als Zeichen interpretiert und nicht als Steuerzeichen, dann muss das Zeichen mit einem Gegenschrägstrich (backslash) maskiert werden, andere Zeichen werden als Zeichen interpretiert und damit sie als Steuerzeichen erkannt werden müssen sie mit einem Gegenstrich (Backslash) maskiert (escaped) werden. In der folgenden Tabelle ist eine Liste der Steuerzeichen.

Spezielle Steuerzeichen / Sonderzeichen
Code Erläuterung
\n Neue Zeile Linefeed (LF, 0x0A)
\r Absatz Carriage return (CR, 0x0D)
\t Horizontaler Tab (HT, 0x09)
\\ Gegenstrich (Backslash) schreiben
\$ Dollar schreiben statt Variable interpretieren
\" Anführungszeichen schreiben statt Zeichenkette zu beenden

Für unseren aktuellen Stand ist die Liste erst einmal ausreichend, die vollständige Liste findet ihr unter Variablentypen: String

Strings können auch von einzelnen Anführungszeichen, Hochkommatas, umschlossen werden, dann werden Sonderzeichen mit Ausname der Maskierungen des Gegenschrägstrichs (\\) und dem Hochkommata (\') und Variablen nicht interpretiert. Variablen werden bei einzelnen Hochkommatas in Zeichenketten über einen Punkt zwischen zwei durch Hochkommatas abgeschlossene Zeichenketten eingefügt. Achten Sie auf die Anführungszeichen, Gegenschrägstriche und Punkte, die Ausgabe ist in den grünen Kommentaren der echo-Anweisung nachgestellt.

  1. $var = "Anna";
  2. echo "Hier betreut Sie $var."; // Hier betreut Sie Anna.
  3. echo "Hier betreut Sie \$var."; // Hier betreut Sie $var.
  4. echo 'Hier betreut Sie '.$var.'.'; // Hier betreut sie Anna.
  5. echo 'Hier betreut Sie $var.'; // Hier betreut Sie $var.
  6. echo 'Darstellung in \'\' von \\\' durch \\\\\\\'';
    // Darstellung in '' von \' durch \\\''

Ein Gegenschrägstrich (Backslash „\„) in Hochkommata (single Quotes) muss nicht notwendiger Weise in allen Fällen maskiert werden, wenn aber Ausgegeben werden soll, wie man Hochkommatas maskiert in Hochkommata mit echo, dann kann das zu exzessivem Maskieren von Gegenschrägstrichen und dem Hochkommata führen. Es bedarf sieben Gegenschrägstriche und ein Hochkommata um \\\' in Hochkommata zu schreiben, für jeden der drei Gegenschrägstriche einen Maskierungs-Gegenschrägstrich und einen Maskierungs-Gegenschrägstrich für das Hochkommata.

In dem nachfolgenden Codeblock sind zwei nützliche Dinge mehrzeilige Kommentare zum ein und ausblenden von Funktionen im Script und die mehrzeilige String-Variable:

  1. // Kommentartrick zum temporären Auskommentieren
  2. /**
    /
    // Mehrzeiliger Kommentar:
    echo <<<VARNAME
    Diese echo-Anweisung ist auskommentiert und alles was es braucht, die echo-Anweisung wieder scharf zu schalten, ist die einzelnen Schrägstriche am Anfang und am Ende in eine Zeile wie folgt /**/ zu nehmen. In der Entwicklungsphase eines Scripts ist das sehr nützlich.
    VARNAME;
    /
    **/

Der mehrzeilige Kommentar ist nicht nur um im Kopf des Skriptes für Metatext zum Skript geeignet, sondern auch um schnell Codeteile zu deaktivieren und aktiveren, z.B. um in der Entwicklungsphase Variationen zu testen oder Fehlerquellen zu identifizieren und eliminieren. (mehr …)

Linktipps String-Funktionen & Emailadressen vernebeln

tempa wrote this 21:47:

 
Linktipps:

  1. Eine schöne, praktische und verständliche
    Stringfunktionen-Übersicht auf HTML bis PHP: String-Funktionen.
  2. Die besten E-Mail-Vernebelungstechniken: Best Method for Email Obfuscation?

Zu 2.: Mein Favorit ist die ROT13-Javascript-Version. Aber, ohje, reines Javascript ist böse. Wir wollen also das <noscript> nicht vergessen, wenn auch das String Reverse mit CSS kaum als Barrierearm gelten kann, aber wenigsten wer Javascriptfrei surft, bekommt eine E-Mail-Adresse zu lesen.

Aus manfred.mustermann@wegwerf-emails.de wird via ROT13 encoder znaserq.zhfgreznaa@jrtjres-rznvyf.qr. Javascript decodiert den Buchstabensalat wieder:

  1. <script>
  2. document.write("<n uers=\"znvygb:znaserq.zhfgreznaa@jrtjres-rznvyf.qr\" ery=\"absbyybj\">Fraq n zrffntr</n>".replace(/[a-zA-Z]/g,
  3. function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));
  4. </script>

Mit der PHP Funktion strrev

  1. <?= strrev('manfred.mustermann@wegwerf-emails.de'); ?>

kehrt man die E-Mailadresse für den <noscript>-Tag um:
ed.sliame-frewgew@nnamretsum.derfnam
und die umgekehrte E-Mailadresse wird über CSS

  1. .obfuscate {unicode-bidi: bidi-override; direction: rtl;}

wieder zu: ed.sliame-frewgew@nnamretsum.derfnam. Nur mit dem Copy&Paste der E-Mailadress im <noscript> ... </noscript> wird’s nix mehr.

Die zweite PHP-Lektion: Rechnen mit Zahlen und das Datumsformat

tempa wrote this 12:12:

Um sich noch etwas mehr mit dem Datum und Variablen austoben zu können, z.B. im Dezember mit schönen Sprüchen einen Adventskalender zu produzieren oder etwas aktueller für den kommenden Sommer Freizeittipps zu geben.

Rekapitulieren wir noch mal. „Variablen deklarieren“ geht wie folgt. Eine Variable wird mit dem $-Zeichen eingeleitet, dem der Unterstrich oder ein Buchstabe folgt. Eine Zahl darf nicht direkt nach dem Dollarzeichen stehen, dazwischen muss schon noch ein Unterstrich oder einem Buchstaben stehen. Ein Variablenname kann Zahlen enthalten, aber __nicht__ direkt dem $-Zeichen gefolgt. $XYZ123 ist zulässig, $123XYZ ist nicht zulässig. Ebenfalls unzulässig ist ein Bindestrich bzw. Minuszeichen. Das Minuszeichen ist ein Operator und führt im Variablennamen zum Syntaxfehler.

Schaut man in die PHP-Dokumentation, begegnen uns unter anderen folgende Variablentypen:

  • Wahrheitswert: (bool), (boolean) – nach boolean
  • Ganzzahl: (int), (integer) – nach integer
  • Fließkommazahl: (float), (double), (real) – nach float
  • Zeichenkette: (string) – nach string

Die restlichen Variablentypen stellen wir hinten an für spätere Exkursionen in PHP.

Ganzzahlen werden positiv oder negativ geschrieben, Ganzzahlen sind nicht gesondert markiert. Um eine Zahl in eine Variable zu speichern, wird die Zahl ohne Zusatznotationen zwischen dem Gleichheitszeichen und Semikolon geschrieben:

$ganzzahl = 10; bzw. $ganzzahl = -10;

PHP rechnet in den meisten Fällen im Dezimalsystem, muss aber nicht. Stellt man der 10 eine 0 voran so wird daraus die oktale 8 und 0x vorangestellt ergibt hexadezimal 16.

  1. $a = 10; // dezimal 10
  2. $b = 0x10; // hexadezimal: 16
  3. $c = 010; // octal: 8
  4. $d = $a + $b + $c;
  5. var_dump($a); // (int)10
  6. var_dump($b); // (int)16
  7. var_dump($c); // (int)8
  8. var_dump($d); // (int)34

PHP rechnet mit den verschiedenen Formaten im bunten Kompott problemlos, am Ende wird ein Dezimalwert ausgegeben. Im Kommentar (mit doppelten Schrägstrichen eingeleitet) ist das Format und der Wert in den Zeilen 1 bis 3 angegeben. Übrigens Kommentare mit vorangestellten Doppelschrägstrich sind einzeilig und helfen den Code verstehen. Für den Augenblick sind die Codes überkommentiert, da sehr viel noch erklärt werden muss. Mehrzeilige Kommentare werden mit Schrägstrich und Stern /* Kommentar */ umklammert.

Weiter geht es – Rechnen mit Fließkomma (floats):

  1. $a = 10; // integer
  2. $b = 0.5; // float
  3. $c = $a*$b;
  4. var_dump($a); // (int)10
  5. var_dump($b); // float(0.5)
  6. var_dump($c); // float(5)

Obwohl PHP mit echo $c; 5 und nicht 5.0 ausgibt, also Ganzzahl nach dem Erscheinungsbild, wird die 5 als Fließkommazahl registriert. Achtung: PHP verwendet englische Konventionen. Kommastellen werden mit einem Punkt statt eines Kommas dargestellt.

Das Zahlenformat lässt sich den jeweiligen nationalen Konventionen mit number_format($Fließkommazahl = 1.5, $Dezimalstellen = 0 , $Dezimaltrennzeichen = ',' , $Tausendertrennung = '\'') anpassen.

(mehr …)

Yet another Regular Expression Rundschau

tempa wrote this 01:10:

Ein regulärer Ausdruck setzt sich wie folgt zusammen: Delimiter Suchmuster Delimiter Modifier, wobei Delimiter oblogatorisch und Modifier optional sind.

  1. $FundstellenArray = preg_match(/Suchmuster/i,$suchtext)
  • Delimiter: „/“ // ebenso mögliche Delimiter # ~ @ !
  • Suchmuster: „Suchmuster“ // nach Begriff suchen
  • Modifier: „i“ // Groß- und Kleinschreibung ignorieren

Taucht ein Delimiter innerhalb des Suchstrings auf, muss dieser mit einem Backslash escaped werden oder ein anderer Delimiter gewählt werden. Fehlt hier die Kontrolle über das Suchmuster, kann die Aufgabe Metazeichen zu escapen automatiert werden.

  1. /\QSuchmuster\E/

Alles zwischen \Q und \E ist Teil des Suchmusters ohne Metazeichen. Metazeichen werden so verwendet wie sie sind ohne deren Funktionalität. Alternativ kann auch die Funktion preg_quote() genutzt werden.

  1. $suchmuster_quoted = preg_quote($suchmuster,$delimiter);
Zeichenauswahl
Code Erläuterung
Muster Entsprechung wie im “Muster”-String
^Muster Entsprechung des “Muster”-Strings am Anfang des Strings Achtung! Zirumflex direkt nach geöffneter eckiger Klammer ändert die Bedeutung!
^Muster$ Alleinstehender “Muster”-String
Muster$ Entsprechung des “Muster”-Strings am Ende des Strings.
[bdf] eines der Zeichen “b”, “d”, “f”
[0-6] eine Ziffer von “0” bis “6” Mit dem Bindestrich wird ein Bereich definiert
[A-Za-z0-9] beliebige lateinische Buchstaben oder beliebige Ziffern
[^a] beliebiges Zeichen außer “a” “^” vor Zeichen in eckigen Klammern negiert selbige
[-A-Z], [A-Z-] bzw. [A-Z\-a-z] Auswahl enthält auch den Bindestrich “-”, wenn er das erste oder das letzte Zeichen in der Aufzählung einer Zeichenklasse ist
. Der Punkt steht für ein beliebiges Zeichen außer einem Zeilenwechsel.
Eckige Klammern definieren eine Zeichenauswahl, das Zirkumflex “^” an erster Stelle negiert die Auswahl, das Zirkumflex innerhalb der Auswahl oder am Ende ist literal zu verstehen, ein Bindestrich “-” am erster oder letzter Stelle in der Klammer ist literal zu verstehen, innerhalb beschreibt es einen Bereich von … bis. Alle anderen Metazeichen in der Klammer werden literal verstanden und als zu Suchendes eingeordnet. In der eckigen Klammer verlieren sie ihre Funktion im regulären Ausdruck.

Runde Klammern fassen logische Gruppen zusammen. Der reguläre Ausdruck #Muster(knabe|haus|gatte.)# findet den Musterknabe, das Musterhaus und den Mustergatten, der Musterartikel hingegen trifft nicht auf das Suchmuster zu. ~“artikel” ist keine erlaubte Alternative in der Suchuntergruppe.

(mehr …)

Datenformate und Zeichensätze

tempa wrote this 01:11:

Am Anfang einer HTML- und PHP-Karriere glaubt man noch, dass einem der Bit-, Windows, Linux und Unix-Kram egal sein kann, auch der Charset lässt einen kalt. Man übernimmt noch den Charset, z.B. den Windows-1252, im Head-Meta-Tag der HTM-Datei, weil das alle so machen. Und dann nutzt man ein Sonderzeichen, das z.B. ISO-8859-1 Charset nicht abgedeckt ist oder übernimmt Daten direkt per include von Kunden, die ein anderes Format haben als das Windows basierende erweiterte ASCII namens ANSI verwendet und in UTF-8 mit oder ohne BOM gespeichert wurde und vica versa oder will Maildaten auswertern und stolpert über den Unterschied zwischen 8 und 7 Bit.

Die folgenden Zahlensysteme in der Tabelle unten dienen in Computersystemen dem Ausdruck und der Repräsentation von Sympolen und Operationen. Der Computer – so wissen wir – unterscheidet zwei Zustände, aus und an oder Binär ausgedrückt 0 und 1. In einem Bit speichert der Computer 8 Mal entweder die 0 oder die 1 und drückt so z.B. Dezimalwerte oder unser Alphabet aus. sämtliche noch so komplexe Ausdrücke im Computer können zurückgeführt werden auf eine Kombination von 0 und 1 in Bits und Bytes. Wieviele Stellen, ob 8, 16, 32, 64 oder 128, was repräsentieren, ist dabei eine Frage des Systems.

Wir Menschen beginnen das Zählen und Rechnen mit dem Dezimalsystem und lernen die Zahlen von 0 bis 9 und dass mit 10 und jeder weiteren Stelle um Faktor 10 erweitert wird, 100, 1’000, etc.. Unser Dezimalsystem kann hergenommen werden um Buchstaben zu repräsenetieren, z.B. 5 = E denn E steht an der 5. Stelle in unserem Alphabet. In Computersystemen wird das Dezimalsystem allerdings gewöhnlich nicht verwendet, um Buchstaben aus dem Alphabet zu repräsentieren. Ein Datum begegnet einem da schon des öfteren als verwirrend lange Zahl aus dem Dezimalzahlensystem, nur gut dass uns Funktionen zur Verfügung stehen, die aus der Zahl wieder ein konventionelles, für uns menschen lesbares, Datum wandelt.

Auch das Hexadecimalsystem ist den Meisten, die schon mit HTML und CSS Webseiten erstellt haben, begegnet. In der Regel wird der RGB-Wert hexadezimal ausgedückt #FFFFFF = Rot: 255 Gelb: 255 Blau: 255. Das Hexadezimalsystem 24 (=256) eignet sich um übersichtlich für Mensch halbwegs lesbar das Binäre 28 abzubilden. Siehe hierzu auch den Beitrag auf Bigwhoop: Wieso nutzen wir eigentlich das Hexadezimalsystem?

Das oktale System ist wie das Binärsystem ein Sysetm, das einem direkt und offensichtlich kaum begegnet. Einmal von mexikanischen Yukis abgesehen, die ihre acht Handknöchel statt der zehn Finger zum Zählen nutzen, eignet sich das Base-8 Zahlensystem in Computer, weil eine Oktalzahl durch drei Bit dargestellt werden kann und dem geminen PHP-Dabbler im Mailverkehr begegnet.

Dezimal 0 1 2 3 4 5 6 7 8 9
Hexadezimal 0 1 2 3 4 5 6 7 8 9
Oktal 0 1 2 3 4 5 6 7 10 11
Binär (dual) 0 1 10 11 100 101 110 111 1000 1001
Dezimal 10 11 12 13 14 15 16  
Hexadezimal A B C D E F 10  
Oktal 12 13 14 15 16 17 20  
Binär (dual) 1010 1011 1100 1101 1110 1111 10000       

Was passiert wenn man unversehens mit dem Octalsystem rechnet?

  1. var_dump($a = 010); // 8
  2. var_dump($b = 0xA); // 10
  3. var_dump($c = 2); // 2
  4. print $a + $b + $c; // 20

Statt 10 + 10 + 2 = 22 hat man folgende Addition aufgemacht 8 + 10 + 2 = 20 (gefunden auf php.dzone.com: PHP Data Types – Octal Notation)

Mittels den 2-Base (Binary), 8-Base (Octal), 10-Base (Decimal) und 16-Base (Hexadecimal) werden wie bereits geschrieben dazu genutzt etwas zu repräsentieren, u.a. Zeichensätze. Hier haben sich je nach länderspezifisch genutztem Zeichensatz im Laufe der Jahre unterschiedliche Systeme entwickelt und je stärker der internationale Datenaustausch in die Gänge kam, desto wichtiger wurde ein einheitliches, länderübergreifendes System notwendig und so wurde statt der diversen „ISO-…“ Zeichensätze der UTF-8 Zeichensatz populär. Ein Zeichen wird je nach System direkt Binär, octal oder hexadezimal im Hintergrund des Programmes (z.B. Texteditor, Browser, etc.) dargestellt. Im Falle von UTF-8 kommt noch hinzu, dass einige Systeme (Editoren) dem Text eine UTF-8 Kennung voranstellen, dem BOM (= Byte Order Mark), was die Entzifferung des UTF-8 beeinflusst und um Fehler zu vermeiden sollte eine unbekannte, fremde, externe UTF-8 Textquelle auf das Vorhandensein des BOM geprüft und entsprechendes ggf. entfernt werden.

  1. $str = file_get_contents('extern_utf8.txt');
  2. $bom = pack("CCC", 0xef, 0xbb, 0xbf);
  3. if (0 == strncmp($str, $bom, 3)) {
  4. // BOM detected, remove BOM:
  5. $str = substr($str, 3); }

Wer nicht aufpasst, hat schnell einen Buchstabensalat auf dem Monitor. Das kann selbst dem Präsidenten der USA in einem sehr öffentlichen Forum passieren. Siehe: Why the #AskObama Tweet was Garbled on Screen

Gründe für den Zeichensalat sind sowohl in den Bit-Systemen, den Zeichsätzen und an einleitenden Datei-Markern wie z.B. BOM zu suchen und das Problem wird uns sicher noch lange begleiten.

EGPCS-Variablen waschen und desinfizieren

tempa wrote this 09:38:

Allem, was von außen kommt, misstraut der Programmierer mit gutem Grund. Was von außen kommt, wird gereinigt, desinfiziert und vom Türsteher nur durchgelassen, wenn die Variable den Whitelist-Pass passiert. Was muss zum Türsteher? Die EGPCS-Variablen (Environment, GET, POST, Cookie, Server), die Superglobals:

  • $_ENV
  • $_GET
  • $_POST
  • $_REQUEST
  • $_COOKIE
  • $_SERVER
  • $_SESSION

Seit PHP5 gibt es zur Absicherung der Superglobals die Filterfunktionen, u.a. filter_input_array, mit dem man gleich eine Sammlung, wie man sie in einem Formular vorfindet, bereinigen kann. Dazu sollte man auch noch die Übersicht der Sanitize filters kennen. Die PHP Dokumentation hat es versäumt Querverweise auf den Seiten bereitzustellen oder es verständlich mit Anwendungsbeispielen zu dokumentieren (Ein PHP-Doku-Klassiker).

Eine gute, gebrauchstaugliche Hilfe für die Filterfunktion habe ich auf jqueryandphp.com gefunden: Before I get started… (aka – Always Sanitize Your User Input!)

So sieht das z.B. aus – das Formular mit den zu säubernden Formularfeld-Eingaben:

  1. <form action="adduser.php" method="post">
  2. Vorname: <input type="text" name="vorname" /><br/>
  3. E-mail: <input type="text" name="email" /><br/>
  4. Alter: <input type="text" name="alter" /><br/>
  5. <input type="submit" value="Add User" />
  6. </form>

und der Filterdurchlauf der Formularfeld-Eingaben mittels Array:

  1. $filter = array(
  2. 'vorname' => FILTER_SANITIZE_STRING,
  3. 'alter' => array(
  4. 'zahlenformat' => FILTER_VALIDATE_INT,
  5. 'altersvorgabe' => array('mindestalter' => 18)
  6. ),
  7. 'email' => FILTER_VALIDATE_EMAIL
  8. );
  9. $_FILTERAUSZUG = filter_input_array(INPUT_POST, $filter);

Das funktioniert auch mit den anderen Superglobals. Aber Achtung – wer das einsetzt, sollte sicher stellen, dass die PHP-Umgebung die entsprechenden Voraussetzungen erfüllt, denn wenn nicht, ist man mit dem guten alten preg_match, siehe PHP-Infektionen und anderen Unfug via $_GET und htmlspecialchars, besser bedient und das arbeitet in ähnlicher Weise wie die Filter.

Die erste PHP-Lektion

tempa wrote this 00:06:

PHP Tutorials langweilen ihre Leser in der Regel mit den ewig gleichen Beispielen, die in der echten Welt nur selten Sinn machen. Angefangen mit folgender PHP Anweisung:

  1. <?php echo "Hallo Welt"; ?>

Beginnen wir mit der Frage „Was ist PHP?“ bevor wir auf die Anweisung näher eingehen. PHP stand ursprünglich für „Personal Home Page Tools“ und heutzutage für „PHP: Hypertext Preprocessor“. Für alle die mit Hypertext nichts anfangen können. Hypertext im Internet ist die beschreibende Sprache, die der Maschine erklärt, wo in der Hirarchie der Text steht, bzw. welche Aufgabe der Text erfüllt. Hypertext gibt z.B. an, ob es sich um eine Überschrift, eine Liste oder einen gewöhnlichen Absatz handelt. Mit Hypertext kann ein Text von einem Marker, wie dem Blockelement „<div>“ oder dem Inline-Element „<strong>„, umschlossen werden und dergestalt können Inhalte zusammengefasst und sowohl semantisch wie optisch hervorgehoben werden.

(mehr …)

8-Bit over 7-Bit – Sonderzeichenmurks aus dem Mailfächle

tempa wrote this 04:51:

Viel Infos kommen im Postfach des Mailprogramms an und manchmal möchte man die Mails aus der Inbox oder einem der Unterordner in PHP weiter verwursten. Und 50 Jahre nach Gründung des Internets und des sehr regen internationalen Internetdatenverkehr scheint sich eine Vereinheitlichung der Datenformate noch immer etwas zu zieren. UTF-8 ist auf meinem alten Rechner nicht standard. Ich muss immer noch darauf achten, dass ich von ANSI auf utf-8 umstellen muss. Wenn ich bei der Verarbeitung auf Datensalad bei Sonderzeichen stoße, ist mein erster Gedanke UTF-8 zu ANSI Murks. Ich gehe also zu utf8_encode bzw. utf8_decode um den Zeichensalat aufzulösen. Pech gehabt!

Wenn Mail utf-8 ist, HTML charset utf-8 ist und das Script utf-8 ohne BOM gespeichert ist, könnte man verzweifeln. Den mit ut8_encode oder utf8_decode kommt man hier nicht weiter. Der Charset ist nicht das Problem, sondern der Faktor der ein Zeichen vom anderen trennt. Ein wahres Wunder also, dass nur die Sondezeichen betroffen sind. Der Umstieg von 7 Bit auf 8 Bit (Quoted Printable aus dem Mailkanal) findet man in der PHP-Doku unter den String-Funktionen (ohne Querverweis bei den Mailfunktionen): quoted_printable_decode

  1. $string = "=C3=84 =C3=96 =C3=9C, =C3=84=C3=96=C3=9C";
  2. echo quoted_printable_decode($string);
  3. /* Sonderzeichenausgabe: Ä Ö Ü, ÄÖÜ */

Dem DAU wird die Problemzuordnung in der Doku erschwert. Ist dort schließlich statt des Gleichheitszeichen „=“ das Prozentzeichen „%“ verwendet. Wäre ich kleiner PHP-Dau nicht über die RegEx-Syntax gestolpert und hätte im Forum php.de gefragt, hätte ich immer noch nicht das Problem korrekt identifiziert. Meine Lösung war ein preg_replace mittels Zeichen-Set im JSON-Objekt:

  1. $mails = file_get_contents("[Pfad zur Inbox]/1.eml");
  2. $chars = json_decode('{"Ä" : "=C3=84", "Ö" : "=C3=96","Ü" : "=C3=9C","ß" : "=C3=9F","ä" : "=C3=A4","ö" : "=C3=B6","ü" : "=C3=BC","EUR" : "=E2=82=AC"}');
  3. foreach ($chars as $key => $value){
  4. $mails = preg_replace(/$value/ , $key, $mails);
  5. }

Für dieses Problem zu umständlich (auch potentiell unvollständig), aber generell ein nettes, übersichtliches Script um mehrere Begriffe in einem Text auszutauschen und als solches nicht ganz für die Katz.

Vom Foto zur Zeichnung mit Photoshop

tempa wrote this 03:50:

Originalfoto Auf doublenine (link lost) habe ich ein Tutorial entdeckt: In fünf Schritten vom Foto zur Zeichnung.. Cool, gleich mal probieren. Also ein Foto geschnappt. Ich verwende das Photocase-Bild von Tschanga Hausfrauenklischee
Nick Slusarczyk (link lost) geht einen anderen Weg als ich sonst. Gewöhnlich mache ich ein Greyscale und spiele mit den Kontrasten. Es reichen meist ein sehr harter Kontrast und ein etwas weicherer, die man mit unterschiedlichen Opacitiy-Werten übereinanderlegt.

Meine Methode im Vergleich zu der von Nick Slusarczyk

  1. Dublizieren Strg+Shift+U um die Farbe ein Greyskale zu erhalten (gleich noch einmal dublizieren, denn wir brauchen zwei davon)
  2. Kontraste Helligkeit 40, Kontrast 100 das darüberligende Helligkeit -20 Kontrast 100 und Opacity 30.
  3. Kleine Momente des FrustsEntweder so wie ich das gewöhnlich macheSo gross … selber mit den dem Buntstift Farben flächig verteilen und dabei auch die Farben des Originals ignorieren (siehe Kleine Momente des Frusts (link lost) Ersatzweise ein Bsp. rechts) oder wie jetzt hier mehrere Ebenen des Originals über einander oberhalb der beiden Greyscale Ebenen und so lange gespielt bis mit Multiplizieren, Farbe und ineinander kopieren, bis es passt.

Originalfoto Foto Greyscale Recolored

Bei der Methode mit von Nick Slusarczyk über den selektiven Weichzeichner überspringe ich die Schritte drei und vier. Die weiteren Schritte hatten nicht das gewünschte Ergebnis erbracht. Auch habe ich an den ersten Schritt noch ein Scharfzeichnen gesetzt. Und dann wieder beim 5 Schritt eingesetzt

Originalfoto Outlined Recolored

Jetzt habe ich also zwei Methoden, um aus einem Foto ein einen Comic zu machen. Auch gut.

Übrigens das Bild oben kombiniert die Methoden und spielt noch einmal mit Opacity in den verschiedenen Ebenen. Auch wirken sich nun die Schritte in Fünf hier wieder positiv aus.

Ursprünlich am 28. Mai 2005 unter blog.templaterie.de/wordpress publiziert.

Syntax Highlighting

tempa wrote this 01:25:

Ich will bunte Codeschnipsel-Bereiche. Wie geht das? Die kurze Antwort ist ein Verweis auf das populäre GeSHi, den Generic Syntax Highlighter.

Die PHP-Funktion, die diese Aufgabe mittels inline styles löst, lautet: highlight_string().

  1. <?PHP
  2. $extCodeFile = "codeFolder/codeschnipsel.phps";
  3. $codeSample = <<<CODESCHNIPSEL
  4. Hier mehzeiligen Code-Schnipsel einfügen.
  5. CODESCHNIPSEL;
  6. ?>
  7. <h3>Code von externem File?</h3>
  8. <div class="codetxt">
  9. <?PHP highlight_string($extCodeFile); ?>
  10. </div>
  11. <h3>Code von HEREDOC Variable?</h3>
  12. <div class="codetxt">
  13. <?PHP highlight_string($codeSample); ?>
  14. </div>

Wer auf ein einheitliches, ungebrochenes Farbschema in seiner Site achtet und ansonsten es liebt die Kontrolle über seinen Code und sein CSS zu behalten, der wird die PHP-Funktion überarbeiten müssen. Einen sehr guten Beitrag hierzu findet man im Blog auf regexp-evaluator.de: PHP-Highlighting-Funktion verbessern.

Recent Comments:

  • Silke schümann { Du warst auf dieser Seite: Step1 zur Archiv-Thumbgalerie via Custom fields Marke Eigenbau http://templaterie.de/blog/931/step1-zur-archiv-thumbgalerie-via-custom-fields-marke-eigenbau/ Hier war ich noch am Basteln. Ich fürchte meine PHP-Kenntnisse sind... } – Aug 26, 9:29 AM
  • Andreas { Hey, ich habe den Code wie oben benutzt und auch $dgal = get_posts('category=1′); on der richtigen Zeile eingesetzt nur bei mir läufts immernoch nicht. Kann... } – Aug 26, 3:20 AM
  • Fred { "wer Smarty lernt, kann tatsächlich gleich auch PHP mitmachen, ich hatte es eine zeitlang auch eingesetzt, aber jetzt mach ich es wieder auf meine art... } – Jan 06, 7:14 PM
  • Silke Schümann { Das klingt nach einem Syntaxfehler in der ersten Zeile. Anführungszeichen korrekt? Und das Plugin funktioniert nur innerhalb von Editland. Die index.php ausserhalb von Editland aufzurufen... } – Jun 18, 3:40 PM
  • Jörg { Hallo, ich habe die index.php im ersten Abschitt Nr. 3 beschrieben, angelegt. Beim Aufruf der Seite wird folgende Fehlermeldung angezeigt: Parse error: parse error, unexpected... } – Jun 18, 3:14 PM
  • Michael { Gern geschehen 😉 } – Mai 29, 2:31 PM
  • Silke Schümann { Jepp. Das war's: ES tut! Lösung ist nun in einem eigenen Beitrag: Step1 zur Archiv-Thumbgalerie via Custom fields Marke Eigenbau Fertig und betriebstüchtig! 🙂 } – Mai 29, 1:25 PM
  • Michael { Wie wäre es, wenn Du die Zeile $dgal = get_posts('category=1'); auslagerst und den Rest in eine Funktion packts, der Du $dgal übergibst. Das wäre auch... } – Mai 29, 12:45 PM
  • Silke Schümann { Ich ziehe diees Variante ebenfalls vor, dovh wenn ich Code übernehmen, dann ändere ich hierfür nicht extra. Es dürfte gehzpft wei gesprungen sein, welche man... } – Mai 29, 2:00 AM
  • Ulf { ich würde bei der Syntax für Schleifen konsequent die C-ähnliche Variante mit geschweiften klammern nehmen, nicht die alternative mit Doppelpunkt und "endwhile" bzw. "endforeach". } – Mai 29, 12:00 AM
  • Silke Schümann { Ich habe ich http://franchie.de die Thumbs in der Sidebar erfolgreich ausgelesen. Ansonsten ist die Test-Umgebung unter 1a-test dot de / blog Ich will diese Adresse... } – Mai 28, 11:37 PM