Bottoni CSS, la soluzione finale?

Al problema del layout dei bottoni ci ho pensato spesso.
Le questioni sono diverse:
- voglio una grafica elastica, in grado di supportare anche testi discretamente lunghi
- voglio la stessa grafica sia per i link (tag A HREF) sia per i bottoni della form
- voglio poter avere un modo per inserire im maniera agile un'icona nella grafica

Ho cercato molto sulla rete e ho cercato di assemblare una serie di tecniche
- la tecnica delle "Sliding Doors" mi garantisce una grafica che regga testi di lunghezza variabile
- usando il tag BUTTON al posto dei tag INPUT SUBMIT e INPUT BUTTON riesco ad avere un elemento del DOM molto più simile al tag A HREF
- scopiazzando un po dalla soluzione di youtube dovrei aver trovato una soluzione agile per le icone interne al pulsante

Il codice HTML finale poi si potrebbe wrappare con delle funzioni PHP apposite per semplificarne la composizione.

Il risultato dovrebbe essere sufficientemente cross-browser dovrebbe funzionare su tutti i maggiori browser in giro mentre sto scrivendo (Chrome 7; FF3.6; IE[6/7/8]; Opera 10.63)

Per vedere una demo funzionante
http://nulll.netsons.org/demo/css-button.htm

*{font-family: arial,sans-serif; font-size:15px}


/* Per il tag A */
a.xlbx_Btn {
	display: block;
	float: left;
	text-decoration: none;
}

a.xlbx_Btn span {
	display: block !important;
	display: inline;
}

a.xlbx_Btn span b{
  position: relative;
  display: block;
  white-space: nowrap;
  float:left;
}


/* Per il tag BUTTON */
button.xlbx_Btn {
  position: relative;
  border: 0;
  padding: 0;
  cursor: pointer;
  overflow: visible; /* removes extra side padding in IE */
}

button.xlbx_Btn::-moz-focus-inner {
  border: none;  /* overrides extra padding in Firefox */
}

button.xlbx_Btn span {
  position: relative;
  display: block;
  white-space: nowrap;
}

/* questo su IE8 sembra spostare malamente la scritta nello span*/
html>body button.xlbx_Btn b {
  position: relative;
  display: block;
  white-space: nowrap;
  float:left;
}

@media screen and (-webkit-min-device-pixel-ratio:0) {
  /* Safari and Google Chrome only - fix margins */
  button.xlbx_Btn span {
    margin-top: -1px;
  }
}



/* Sfondi dei bottoni */

/* verde */
button.xlbx_Btn.xlbx_green, a.xlbx_Btn.xlbx_green{
  padding: 0 15px 0 0;
  margin-right:5px;
  text-align: center;
  background: transparent url(img/bg_green.gif) no-repeat right -24px;
}

button.xlbx_Btn.xlbx_green span, a.xlbx_Btn.xlbx_green span {
  padding: 5px 0 0 15px;
  height:24px;
  background: transparent url(img/bg_green.gif) no-repeat left top;
  color:#fff;
  font-weight:bold;
}



/* Icone */

/* speaker */
button.xlbx_Btn span b.xlbx_speak, a.xlbx_Btn span b.xlbx_speak{
  height:24px !important; height:0px; /* questo serve a fare in modo che a IE gli diamo height 0*/
  width:24px;
  background: url(img/speaker.gif) no-repeat left center;
  margin-top:-5px !important; margin-top:0px;
}


/*
Esempio di pulsante con icona su bottone di una form
<button value="submit" class="xlbx_Btn xlbx_green"><span><b class="xlbx_speak"></b>E SPRANGA STO VOLUME PER FAVORE</span></button>

Esempio di pulsante con icona su di un href
<a href="http://www.google.com" class="xlbx_Btn xlbx_green"><span><b class="xlbx_speak"></b>E SPRANGA STO VOLUME PER FAVORE</span></a>

Esempio di pulsante senza icona su bottone di una form
<button value="submit" class="xlbx_Btn xlbx_green"><span>VOLUME</span></button>

Esempio di pulsante senza icona su di un href
<a href="http://www.google.com" class="xlbx_Btn xlbx_green"><span>VOLUME</span></a>
*/

utf-8 validato per xml

Per capire le problematiche di encoding, bisogna capire che dietro a quello che noi a video vediamo come una lettera, ci possono essere più valori (byte) che contengono l'informazione su una sola lettera.
Consiglio la lettura di questa guida che è molto ben fatta
http://www.phpwact.org/php/i18n/charsets

Quando si inserisce del testo in un documento xml codificato in utf-8 ci possono essere due tipi di problemi:

1. il testo contiene dei caratteri utf-8 invalidi
2. il testo contiene dei caratteri utf-8 che in un xml sono invalidi

1. il testo contiene dei caratteri utf-8 invalidi
Un testo può contenere dei caratteri utf-8 rotti, invalidi a causa di problemi di trasformazione di encoding, o di errori di salvataggio eccetera...
La presenza di un carattere utf-8 rotto si identifica con una sequenza di byte inaspettata secondo le specifiche dell'encoding utf-8
http://en.wikipedia.org/wiki/UTF-8

2. il testo contiene dei caratteri utf-8 che in un xml sono invalidi
I caratteri utf-8 invalidi in un xml sono descritti nelle specifiche xml
http://www.w3.org/TR/REC-xml/#charsets
un esempio sono i caratteri di controllo come il Vertical Tab (0x0B) o il Bell (0x07)
Questi caratteri sono caratteri utf-8 validi, ma non hanno senso e non sono rappresentabili in un documento XML

// Questa funzione ci dice se la stringa contiene caratteri utf-8 invalidi
function utf8_compliant($str) {
    if ( strlen($str) == 0 ) {
        return TRUE;
    }
    // If even just the first character can be matched, when the /u
    // modifier is used, then it's valid UTF-8. If the UTF-8 is somehow
    // invalid, nothing at all will match, even if the string contains
    // some valid sequences
    return (preg_match('/^.{1}/us',$str,$ar) == 1);
}

// Questa funzione ripulisce una stringa utf-8 dai caratteri non ammessi in un xml
function utf8_for_xml($string)
  {
  return preg_replace(
  '/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', 
  ' ',
  $string);
  }

Estrarre una tabella da un dump mysql

Capita a volte di avere la necessità di estrarre da un dump anche molto corposo la struttura e i dati di una sola tabella mysql

#!/bin/bash

if [ $# -ne 2 ]
then
  echo "Usage: ./`basename $0` FILE TABLE [RESULT_FILE]"
  echo "Example: ./`basename $0` last.dump tblLog"
  exit
fi

src=$1
tbl=$2
out=$3

if [ ! -n "$3" ]; then  # -n tests to see if the argument is non empty
  out="$tbl.sql"
fi

awk "/Table structure for table \`$tbl\`/,/UNLOCK TABLES/{print}" $src > $out

Unità di misura più rappresentativa dato un valore in bytes

Dato un valore in bytes stampa la rappresentazione più significativa scegliendo tra kilobytes megabytes e gigabytes

function ByteSize($bytes)
  {
  $size = $bytes / 1024;
  if($size < 1024)
    {
    $size = number_format($size, 2);
    $size .= ' KB';
    }
  else
    {
    if($size / 1024 < 1024)
      {
      $size = number_format($size / 1024, 2);
      $size .= ' MB';
      }
    else if ($size / 1024 / 1024 < 1024)
      {
      $size = number_format($size / 1024 / 1024, 2);
      $size .= ' GB';
      }
    }
  return $size;
  }

Mirror FTP Server to Server

Copiare il contenuto di un sito da un server FTP ad un altro server FTP.

# lftp_mirror.sh
open -u from_username,from_password www.from_example.com
mirror -c / ftp://to_username:to_password@www.to_example.com/
quit

# da eseguire con
lftp -f lftp_mirror.sh