Kodesnutter
HTML5
<!DOCTYPE html>
<html lang="nb" xml:lang="nb">
<head>
<title></title>
<meta charset="UTF-8" />
<link rel="shortcut icon" href="/favicon.png" />
<meta name="author" content="Rune M. Andersen" />
<meta name="description" content="" />
<meta name="keywords" content="" />
</head>
<body>
</body>
</html>
XHTML 1.0 Strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html lang="nb-NO" xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <meta name="author" content="Rune M. Andersen" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="style.css" media="all" /> <link rel="stylesheet" type="text/css" href="print.css" media="print" /> </head> <body> </body> </html>
Hash med "salting"
define('SALT_LENGTH', 9);
function generateHash($plainText, $salt = null){
if ($salt === null) {
$salt = substr(md5(uniqid(rand(), true)), 0, SALT_LENGTH);
} else {
$salt = substr($salt, 0, SALT_LENGTH);
}
return $salt . sha1($salt . $plainText);
}
Sesjonsstart
session_save_path("/www/path/to/save/session/files");
session_set_cookie_params(3600, '/url/to/app', '.domain.com', 1);
session_name("AppName");
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
// Hindre bruk av delt cache hvis siden er ment til bare én bruker
header("Cache-control: private");
//Starter sesjonen
session_start();
Hindre caching
En eller flere av linjene under:
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
Korrekt caching med headere
header('Last-Modified: '.gmdate("D, d M Y H:i:s", $updatedTimestamp) . " GMT");
header('Expires: '.gmdate("D, d M Y H:i:s", $expireTimestamp) . " GMT");
Tegnsett
Tving webserveren til å sende riktig innholdstype.
header("Content-Type: text/html; charset=UTF-8");
Unngå dobbelkonvertering av UTF-8 fra databasen.
mysql_set_charset("utf8", $db);
Overføre UTF-8 i MySQL Front: Bruk latin1 connection, lagre fil som utf-8, og importer som utf-8.
Få PHP til å tolke særnorske bokstaver korrekt.
setlocale(LC_ALL, array('nb_NO.UTF-8', 'nb_NO', 'no_NO'));
Ta tiden på eksekvering
// ved start
$timeparts = explode(" ",microtime());
$starttime = $timeparts[1].substr($timeparts[0],1);
// ved stopp
$timeparts = explode(" ",microtime());
$endtime = $timeparts[1].substr($timeparts[0],1);
echo "<span style=\"color: #888\">Lasting tok: ". bcsub($endtime,$starttime,6)." sekunder.</span> ";
WordPress
Beregn når 1. påskedag inntreffer
function spencerJones($y = NULL){
// $y representerer året 1. påskedag skal beregnes for.
$y = !($y) ? date('Y') : $y;
$a = $y % 19;
$b = floor($y/100);
$c = $y % 100;
$d = floor($b/4);
$e = $b % 4;
$f = floor($b + 8)/25;
$g = floor($b - $f + 1)/3;
$h = (19*$a + $b - $d - $g + 15) % 30;
$i = floor($c/4);
$k = $c % 4;
$l = (32 + 2*$e + 2*$i - $h - $k) % 7;
$m = floor(($a + 11*$h + 22*$l)/451);
// Sluttresultatet
$paskemnd = floor(($h + $l - 7*$m + 114)/31);
$paskedag = ($h + $l - 7*$m + 114) % 31 + 1;
$paskedato = mktime(0, 0, 0, $paskemnd, $paskedag, $y);
return $paskedato;
}
var $paskerelatert = array( array(-7, 'Palmesøndag'), array(-3, 'Skjærtorsdag'), array(-2, 'Langfredag'), array(0, '1. påskedag'), array(1, '2. påskedag'), array(39, 'Kristi himmelfartsdag'), array(49, '1. pinsedag'), array(50, '2. pinsedag') );
Tilpass til iPhone/iPod Touch
<!-- Zoomnivå og standardstørrelse --> <meta content="minimum-scale=1, width=device-width, maximum-scale=0.6667, user-scalable=yes" name="viewport" /> <!-- Åpne i fullskjerm, uten toolbars --> <meta name="apple-mobile-web-app-capable" content="yes"> <!-- Sette stil på statuslinja (default/black/black-translucent) --> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <!-- Skru av detektering av tall som kan være telefonnumre --> <meta name="format-detection" content="telephone=no"> <!-- Pent ikon på desktop --> <link href="http://link-to-your.com/app-icon.png" rel="apple-touch-icon" />
Smartere spørringer (group_concat)
Eksempel på hvordan man kan slippe å først spørre etter brukere, deretter rettigheter og til slutt variable, ved å spørre etter lister med tilsvarende informasjon.
select b.*, group_concat(distinct t.applikasjonsID order by t.applikasjonsID separator '|') as tilganger, group_concat(distinct concat(v.applikasjonsID, '='), concat(v.navn, '='), v.verdi separator '|') as variabler from bruker as b left outer join tilgang as t on b.brukernavn=t.brukernavn left join variabel as v on b.brukernavn=v.brukernavn group by b.alias order by b.alias, b.etternavn, b.fornavn
QR-koder vha Google Charts API
http://chart.apis.google.com/chart?cht=qr&chs=100x100&chl=http://m.layar.com/open/ntnuorg
Forhinder "POSTDATA has expired"
header("Cache-control: private");
Koden overstyrer PHP-defaulten «private,nocache», og gjør at browseren tør lagre og presentere en mellomlagret versjon av siden heller enn å poste den på nytt.
Automagisk oversetting med gettext
Bruk gettext på alle teksttrenger i koden:
<?= _('Tekst som skal oversettes') ?>
Lag en katalog med Poedit, og legg den genererte fila messages.mo i mappa ./locale/en_US/LC_MESSAGES. Inkludér i toppen av kildekoden:
$directory = dirname(__FILE__).'/locale'; $domain = 'messages'; $locale = (isset($_GET['locale'])) ? $_GET['locale'] : 'nb_NO.utf8'; setlocale(LC_MESSAGES, $locale); bindtextdomain($domain, $directory); textdomain($domain); bind_textdomain_codeset($domain, 'UTF-8');
Besøk ?locale=en_US.utf8 og se oversatt versjon.
Dynamisk oppdatering av størrelse ved skjermsnuing på iOS-dingser
var changeViewport = function () {
if (window.orientation == 90 || window.orientation == -90)
$('meta[name="viewport"]').attr('content', 'height=device-width,width=device-height,initial-scale=1.0,maximum-scale=1.0');
else
$('meta[name="viewport"]').attr('content', 'height=device-height,width=device-width,initial-scale=1.0,maximum-scale=1.0');
}
window.addEventListener('orientationchange', changeViewport, true);
try { changeViewport(); } catch (err) { }
Velge innhold i inputfelt, uten å miste valget ved klikk nr 2
$('input').focus(function(){
$(this).select();
}).click(function(){
$(this).select();
}).mouseup(function(e){
e.preventDefault();
});
Auto-select input field with jQuery, without having a deselect on clicking
Vise alle feilmeldinger i PHP
error_reporting(E_ALL);
ini_set('display_errors', '1');