Javascript strlen ? Convertire funzioni Php in Javascript

di Redazione Commenta

Sul blog di Kevin Vanzonneveld, è nato, da un pò di tempo, un progetto molto interessante : ‘Porting PHP to Javascript’

Il nome del Progetto è abbasanza esplicativo e mira esclusiavamente a colmare un gap esistente tra le funzioni che abbiamo a disposizione in PHP e quelle su JS. In pratica, in molti siamo ben abili a maneggiare ed utilizzare funzioni in php, ma non sempre abbiamo a disposizione le stesse identiche funzioni in Javascript che è carente in alcuni aspetti.

Lo scopo che si cerca di raggiungere con tale progetto è proprio riscrivere le principali e più utilizzate funzioni del php in js, salvare tutto il codice in un file php.js da avere sempre a disposizione per sfruttarlo quando occorre.

Logicamente trattasi di un proggetto aperto e, chiunque intenda collaborare con commenti o scrivendo direttamente codice, è ben accetto. Sul blog di Kevin segnalato a fine articolo trovate tutte le informazioni necessarie.

javascript-strlen

Un esempio abbastanza ben esplicito di come si stia pensando di lavorare è dato dalla funzione PHP strlen().

La sua descrizione è la seguente :

[sourcecode language=’php’]
int strlen( string string )
[/sourcecode]

In pratica restituisce la lunghezza di una stringa passata come parametro. Se la stringa è vuota restituisce il valore 0. Volendo aderire al progetto, si è cercato di ‘convertire’ questa comoda funzione in javascript inglobandola, poi, nel file php.js così da averla sempre a disposizione.

Ecco la traduzione della funzione strlen in javascript :

[sourcecode language=’php’]
function strlen (string) {
// http://kevin.vanzonneveld.net
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + improved by: Sakimori
// + input by: Kirk Strobeck
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Onno Marsman
// + revised by: Brett Zamir (http://brett-zamir.me)
// % note 1: May look like overkill, but in order to be truly faithful to handling all Unicode
// % note 1: characters and to this function in PHP which does not count the number of bytes
// % note 1: but counts the number of characters, something like this is really necessary.
// * example 1: strlen(‘Kevin van Zonneveld’);
// * returns 1: 19
// * example 2: strlen(‘A\ud87e\udc04Z’);
// * returns 2: 3

var str = string+”;
var i = 0, chr = ”, lgth = 0;

var getWholeChar = function (str, i) {
var code = str.charCodeAt(i);
var next = ”, prev = ”;
if (0xD800 <= code && code <= 0xDBFF) { // High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters) if (str.length <= (i+1)) { throw 'High surrogate without following low surrogate'; } next = str.charCodeAt(i+1); if (0xDC00 > next || next > 0xDFFF) {
throw ‘High surrogate without following low surrogate’;
}
return str.charAt(i)+str.charAt(i+1);
} else if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate if (i === 0) { throw 'Low surrogate without preceding high surrogate'; } prev = str.charCodeAt(i-1); if (0xD800 > prev || prev > 0xDBFF) { //(could change last hex to 0xDB7F to treat high private surrogates as single characters)
throw ‘Low surrogate without preceding high surrogate’;
}
return false; // We can pass over low surrogates now as the second component in a pair which we have already processed
}
return str.charAt(i);
};

for (i=0, lgth=0; i < str.length; i++) { if ((chr = getWholeChar(str, i)) === false) { continue; } // Adapt this line at the top of any loop, passing in the whole string and the current iteration and returning a variable to represent the individual character; purpose is to treat the first part of a surrogate pair as the whole character and then ignore the second part lgth++; } return lgth; } [/sourcecode]

Visita il blog di Kevin Vanzonneveld

Lascia un commento

Il tuo indirizzo email non verrà pubblicato.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>