Kategorien
PHP

PHP Rätsel: Wieso hat das Umlaute Array nur 35 Einträge?

Ich arbeite gerade an einer Funktion mit der man String, die mit PHP htmlentities() Funktion Umgewandelt worden sind:

Rauml;tsel

zurück zu wandeln in

Rätsel

weil jemand die Werte so in die Datenbank gespeichert hat, wahrscheinlich ich 🙂

Dazu hab ich die folgende Funktion gebaut, die mir komischerweise ein Array durchläuft, dass nicht die Werte beinhaltet, die man erwarten würde:

HtmlEntitesReplacer::displayHtmlEntities();
class HtmlEntitesReplacer
{

    public static function displayHtmlEntities()
    {
        $i = 0;
        $umlaute = HtmlEntitesReplacer::getUmlauteArray();
        echo "Das Umlaute Array hat ".count($umlaute)." Werte<br>";
        foreach($umlaute  as $umlautFalsch  =>$umlaut)
        {
            $htmlEnties = str_replace("&amp;", "&amp;amp;",htmlentities($umlaut));
            echo "$i) $umlautFalsch <=> $htmlEnties' <=> $umlaut <br> ";
            $i++;
        }
        die();
    }

    private function getUmlauteArray()
    {
        return array(
            'ü'=>'ü',
            'ä'=>'ä',
            'ö'=>'ö',
            'Ö'=>'Ö',
            'ß'=>'ß',
            'Ã '=>'à',
            'á'=>'á',
            'â'=>'â',
            'ã'=>'ã',
            'ù'=>'ù',
            'ú'=>'ú',
            'û'=>'û',
            'Ù'=>'Ù',
            'Ú'=>'Ú',
            'Û'=>'Û',
            'Ü'=>'Ü',
            'ò'=>'ò',
            'ó'=>'ó',
            'ô'=>'ô',
            'è'=>'è',
            'é'=>'é',
            'ê'=>'ê',
            'ë'=>'ë',
            'À'=>'À',
            'Á'=>'Á',
            'Â'=>'Â',
            'Ã'=>'Ã',
            'Ä'=>'Ä',
            'Ã…'=>'Å',
            'Ç'=>'Ç',
            'È'=>'È',
            'É'=>'É',
            'Ê'=>'Ê',
            'Ë'=>'Ë',
            'ÃŒ'=>'Ì',
            'Í'=>'Í',
            'ÃŽ'=>'Î',
            'Ï'=>'Ï',
            'Ñ'=>'Ñ',
            'Ã’'=>'Ò',
            'Ó'=>'Ó',
            'Ô'=>'Ô',
            'Õ'=>'Õ',
            'Ø'=>'Ø',
            'Ã¥'=>'å',
            'æ'=>'æ',
            'ç'=>'ç',
            'ì'=>'ì',
            'í'=>'í',
            'î'=>'î',
            'ï'=>'ï',
            'ð'=>'ð',
            'ñ'=>'ñ',
            'õ'=>'õ',
            'ø'=>'ø',
            'ý'=>'ý',
            'ÿ'=>'ÿ',
            '€'=>'€'
        );
    }

kommt bei der Ausgabe nur auf i=34, obwohl es 57 Sonderzeichen von der Methode getUmlauteArray() zurückgegeben werden.

Kategorien
PHP

Google Shopping API: gshoppingcontent-php für PHP 5.2 downgraden

Eine kleine Veränderungen der Hauptdatei der Google Shopping Bibliothek gshoppingcontent-php macht die Bibliothek auch unter PHP kleiner 5.3. nutzbar:

einfach ab Zeile 54 die Definition der Konstanten ändern, da nur PHP>5.2 die Defintion von Konstanten mit const ausserhalb von Klassen erlaubt:

define('CLIENTLOGIN_URI' , 'https://www.google.com/accounts/ClientLogin');

/**
 * Service name for ClientLogin.
 **/
define('CLIENTLOGIN_SVC' , 'structuredcontent');

/**
 * Auth scope for authorizing against the Content API for Shopping.
 **/
define('OAUTH_SCOPE' , 'https://www.googleapis.com/auth/structuredcontent');

/**
 * User Agent string for all requests.
 **/
define('USER_AGENT' , 'scapi-php');

/**
 * Base API URI.
 **/
define('BASE' , 'https://content.googleapis.com/content/v1/');

/**
 * Google's endpoint for OAuth 2.0 authentication.
 **/
define('AUTH_URI' , 'https://accounts.google.com/o/oauth2/auth');

/**
 * Google's endpoint for exchanging OAuth 2.0 tokens
 **/
define('TOKEN_URI' , 'https://accounts.google.com/o/oauth2/token');

/**
 * Google's endpoint for revoking OAuth 2.0 tokens
 **/
define('REVOKE_URI' , 'https://accounts.google.com/o/oauth2/revoke');
Kategorien
PHP WordPress

WordPress Plugin selber erstellen Tutorial

Wenn man WordPress erweitert, sollte man immer seinen eigenen Code sauber von dem WordPress Core  trennen und ein Plugin programmieren. Ein weiterer Vorteil ist, dass man sein hard ercodetes Plugin natürlich auch in das WordPress Plugin Verzeichnis stellen kann nach Vollendung.

Follgende Schritte sind durchzuführen:

Kategorien
PHP SEO WordPress

WordPress SEO: Meta Description Tag einbauen

WordPress ist sehr sparsam mit Meta-Tags, um das Description Tag einzubauen, muss man folgenden Code in die header.php einbauen:

<meta name="description" content="<?php if ( is_single() ) {
        single_post_title('', true);
    } else {
        bloginfo('name'); echo " - "; bloginfo('description');
    }
    ?>" />

 

Kategorien
PHP Zend Framework

Zend APIs: einzelne Komponenten verwenden

Das Zend Framework enthält viele praktische Schnittstellen zu bekannten APIs:

  1. Google Base (Zend_Gdata)
  2. Open ID (Zend_OpenId)
  3. Zend_Service mit:
  • Zend_Service_Akismet
  • Zend_Service_Amazon
  • Zend_Service_Amazon_EC2
  • Zend_Service_Amazon_S3
  • Zend_Service_Audioscrobbler
  • Zend_Service_Delicious
  • Zend_Service_DeveloperGarden
  • Zend_Service_Ebay
  • Zend_Service_Ebay_Finding
  • Zend_Service_Flickr
  • Zend_Service_LiveDocx
  • Zend_Service_Nirvanix
  • Zend_Service_ReCaptcha
  • Zend_Service_ShortUrl
  • Zend_Service_Simpy
  • Zend_Service_SlideShare
  • Zend_Service_StrikeIron
  • Zend_Service_Technorati
  • Zend_Service_Twitter
  • Zend_Service_WindowsAzure
  • Zend_Service_Yahoo

Eine komplette Liste gibt es hier.

Solche APIs können folgender Maßen eingebunden werden ohne die ganze Webseite als Zend-Projekt programmieren zu müssen (am Bsp. von GBase: Google Base):

Kategorien
SEO WordPress

SEO: Google Autoren Foto anzeigen

Wenn man sein Foto in den Suchergebnissen neben seinen Google Suchtreffern anzeigen will, muss folgende Schritte unternehmen:

  1. Anmeldung bei Google+, im Profil unter macht mit bei die eigene Webseite angeben (Achtung bei mit www und ohne)
  2. den Namen des Autors taggen auf der eigenen Webseite, Bsp: <a href=“https://plus.google.com/107751823415469819633?rel=author“>Sebastian  Viereck</a>
  3. Urheberschaft bei Google verifizieren mit einer Adresse der Domain z.B: seo-google@sebastianviereck.de
  4. Anschließend sollte mit dem Rich Snippets Testing Tool von Google noch einmal verifiziert werden, ob alle Informationen vorhanden sind. Bei mir musste das Google+ Profile nochmals verknüpft werden, siehe Screenshot
Are you the author? If you have an email with sebastianviereck.de and verified it with Google+, please enter your G+ profile to verify your authorship here:

Kategorien
Android C C++ iPhone/iOS Java Mobil MySQL PHP Web Frontend

Teil 2: Clean Code – richtige und falsche Kommentare

Nach dem Buch (Kapitel 4):  „Clean Code – Refactoring, Patterns, Testen und Techniken für sauberen Code“ von Robert C. Martin.

„Kommentieren Sie schlechten Code nicht – schreiben Sie ihn um.“

(Brian W. Kernighan und P.J. Plaugher)

 

Kommentare können beides sein, hilfreich und hinderlich:

  • hinderlich, wenn Sie überholt sind und Fehlinformationen liefern
  • störend, wenn Sie zu lang sind und unnötig
  • hilfreich, wenn Sie wohlplatziert sind

Der Einsatz von Kommentaren „soll unsere Unfähigkeit ausgleich, uns in unserem Code klar auszudrücken“(S.85). Bevor man einem Kommentar schreibt, sollte man vorher überlegen, ob der Code nicht noch ausdrucksstarker geschrieben werden könnte.

Kategorien
C C++ Java Mobil PHP Web Frontend Webdeveloper Tools

Code kopieren Zeilennummern löschen Regex

Beim Kopieren von Code von Webseiten(z.B. Zend.com) kann es vorkommen, dass der Code Zeilennummern enthält, z.B.

  1. // Parameters for ClientAuth authentication
  2. $service = Zend_Gdata_Gbase::AUTH_SERVICE_NAME;
  3. $user = „sample.user@gmail.com“;
  4. $pass = „pa$$w0rd“;
  5. // Create an authenticated HTTP client
  6. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  7. // Create an instance of the Base service
  8. $service = new Zend_Gdata_Gbase($client);
Um die Zeilennumern zu löschen, kann mit z.B. mit Netbeans folgenden Befehl ausführen:
STRG+H (SEARCH and REPLACE)
Find what: [0-9]{1,2}.\n
Replace with: (leer lassen)
Auswählen: Regular Expressions
Regular Expressions Netbeans
Kategorien
PHP

PHP verhindern eines Email Loops bei Mail Auto Respondern (Endlosschleife)

Ein typisches Problem bei automatischen E-Mail Antworten (Auto Respondern) ist, dass es zu einer Endlosschleife kommen kann, wenn automatisch auf E-Mails geantwortet wird und der Empfänger auch eine automatische E-Mail z.B. eine Abwesenheits-Urlaubs E-Mail verschickt. Das Phänomen nennt man Email Loop.

Der Email Loop kann nur verhindert werden durch ein festgelegtes Limit an Nachrichten an denselben Adressaten. Man sollte z.B: festlegen, dass pro Tag nur eine E-Mail an einen Adressaten geschickt wird per Auto-Responder und dies mittels einer Datenbank checken.

Die Datenbank Abfrage für alle E-Mails, die nicht älter als einen Tag sind und schon beantwortet worden sind,  könnte so aussehen:

 $sql = "SELECT COUNT(response_sent)
         FROM autoresponder
         WHERE email='{$email}' AND date_received > TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 day)) AND response_sent=1";

Ein Auto-Responder in PHP besteht aus 3 Teilen:

  1. dem Abrufen der Emails aus dem Postfach
  2. dem Speichern in der Datenbank der Mail-Daten
  3. dem Antworten auf E-Mails

Wenn man einen Auto-Responder nicht gleich als solchen enttarnen will, weil sofort eine Antwort geschickt, wollte man einen Cronjob einrichten, der zufällig bestimmt mit einer bestimmten Wahrscheinlichkeit, ob eine E-Mail beantwortet wird oder nicht.

z.B. mit einer Wahrscheinlichkeit von 10%:

if(rand(0, 1) <= 0.1)
{
answerMail();
}
Kategorien
PHP Webdeveloper Tools Zend Framework

PHP Datenbank Backend generieren Scaffolding

Um schnell eine einfache Möglichkeit für Kunden zu haben, um auf die Datenbank zuzugreifen, kann man das praktische online Tool phpScaffold nutzen.

Damit lassen sich schnell Oberflächen generieren und customizen zum Ändern, Einfügen und Entfernen von Datensätzen einer Tabelle.

Für größere Projekte sollte man allerdings ein passendes Framework nutzen, welches Scaffolding unterstützt:

Bsp Ergebnis: