PHP turi iconv ir mb_convert_encoding funkcijas, kurios daro tą patį – perkoduoja simbolių eilutę.

Prabenchmarkinus man tas funkcijas ant dviejų sistemų (win ir linux) jų vykdymo greitis panašus, tačiau iconv, 5 – 15% greitesnė. Benchmarko kodas:

<?php

$string = 'labas, kas pas jus yra gero? Ąžuolų turite?';
$loop_count = 100;

require_once('Benchmark-1.2.6/Profiler.php');

$profiler = new Benchmark_Profiler();
$profiler->start();

$profiler->enterSection('mb_convert_encoding');
for ($i = 0; $i < $loop_count; $i++) {
    $result = mb_convert_encoding($data, 'UTF-8', 'ISO-8859-13'); // windows-1257 to utf-8
}

$profiler->leaveSection('mb_convert_encoding');

$profiler->enterSection('iconv');
for ($i = 0; $i < $loop_count; $i++) {
    $result = iconv('ISO-8859-13', 'UTF-8', $data);
}
$profiler->leaveSection('iconv');

$profiler->stop();
$profiler->display();

?>

Pasidarė įdomu, kokius el. pašto adresus naudoja lietuviai. Galima spėlioti kokie adresai populiariausi, bet geriau leiskime šnekėti skaičiams. Statistika paimta iš vieno mano projekto.

adreso tipas kiekis
one.lt 30 %
yahoo.com 18 %
gmail.com 15 %
delfi grupė 6 %
takas.lt 2.5 %

Šituos skaičiukus padėjo gauti kelios MySQL užklausos.

Pirmoji SQL užklausa padeda gauti el. pašo adresų host dalį ir naudotojų su tokiu adresu skaičių.

SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS host, COUNT(*) AS count
FROM users
GROUP by host
ORDER BY count DESC

Jeigu jūsų MySQL versija 4.1 ar naujesnė ir palaiko subselectus, tai galite gauti ir procentus.

SELECT SUBSTRING(email FROM(POSITION('@' IN email) + 1)) AS host,
       COUNT(*) AS count,
       COUNT(*) * 100 / (SELECT COUNT(*) FROM users) AS percent
FROM users
GROUP BY host
ORDER BY count DESC

Kai kurios pašto sistemos palaiko keletą adresų (tarkime Delfi Webmail paslauga). Tokiu atveju pravers tokia užklausa. Reikės tik PHP arba phpMyAdmin pagalba susižinoti įrašų skaičių.

SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS host
FROM users
HAVING host IN ('delfi.lt', 'centras.lt', 'email.lt', 'mail.lt', 'xxx.lt', 'bamba.lt')

Būtų įdomu sužinoti ir jūsų lankytojų naudojamų el. pašto adresų statistiką – rašykite komentaruose.

Pateikiamos užklausos išbandytos ant MySQL 4.1. Jeigu jos neveiks, gali tekti naudoti kitas SUBSTRING formas ar simbolio paieškos eilutėje funkcijas. Įdomu, kad MySQL turi begalę būdų atlikti SUBSTRING ar fragmento paiešką nurodytoje eilutėje.

Jeigu užsiimi interneto tinklapių programavimu, tai anksčiau ar vėliau tenka rašyti naujienų siuntimą elektroniniu paštu. Aišku, kiekvienas save gerbiantis lietuvis nori siųsti gražius elektroninius laiškus su paveiksliukais ir viskuo, kas tik įmanoma. Man paprastai iš pirmo karto nepavyksta padaryti gražaus HTML laiško šablono, kuris būtų gerai rodomas pas visus (na gerai, pas daugelį). Tikri programuotojai neišradinėja dviračio, o apie HTML laiškų siuntimą skaito MailChimp Email Design Guide.

Tiems, kas naudoja PHP ir pirmą kartą darys HTML laiškų siuntimą, rekomenduoju nesivarginti skaitant mail() funkcijos dokumentaciją, o naudoti PHPMailer.

Apie tai, kaip masiškai siųsti laiškus, rašo Spraitas straipsnyje El. laiškai iš PHP.