mb_strtok() – Δημιουργία με PHP

Καθώς έφτιαχνα μία εφαρμογή, χρειάστηκε να χρησιμοποιήσω τις multibyte functions (που υποστηρίζουν χαρακτήρες πολλαπλών bytes) της php. Συγκεκριμένα, χρησιμοποιούσα κωδικοποίηση utf-8 για την υποστήριξη ελληνικών χαρακτήρων, και χρειάστηκε να χρησιμοποιήσω την αντίστοιχη function της strtok() για να κομματιάσω μία σειρά Ελληνικών χαρακτήρων. Ψάχνοντας τον οδηγό χρήσης της PHP βρήκα σχεδόν κάθε άλλη function, εκτός από αυτή που χρειαζόμουν, οπότε αποφάσισα να δημιουργήσω την δική μου. Την μοιράζομαι μαζί σας, μιας που ούτε το Google θα σας βοηθήσει σε αυτήν την περίπτωση.

function mb_strtok($delimiters, $str=NULL)
{
	static $pos = 0; // Κρατά την θέση στο string για τις επόμενες κλήσεις της function.
	static $string = "";

	// Εάν υπάρχει νέο string, επανέφερε στις αρχικές τιμές τις στατικές παραμέτρους.
	if($str!=NULL)
	{
		$pos = 0;
		$string = $str;
	}

	// Αρχικοποίηση του κομματιού.
	$token = "";

	while ($pos < mb_strlen($string))
	{
		$char = mb_substr($string, $pos, 1);
		$pos++;

		if(mb_strpos($delimiters, $char)===FALSE)
		{
			$token .= $char;
		}
		else
		{
			// Να μην επιστραφούν άδεια strings.
			if($token!="")
				return $token;
		}

	}

	// Έλεγξε εάν είναι το τελευταίο κομμάτι που πρέπει να επιστραφεί.
	if ($token!="")
	{
		return $token;
	}
	else
	{
		return false;
	}
}

Στο πρώτο κάλεσμα της mb_strtok(), η πρώτη παράμετρος πρέπει να είναι ένα string που περιέχει τους διαχωριστικούς χαρακτήρες, και η δεύτερη παράμετρος το string που θα κομματιαστεί. Καί οι δύο παράμετροι μπορούν να περιέχουν multibyte χαρακτήρες.

Η δεύτερη κλήση της mb_strtok() πρέπει να έχει μόνο την πρώτη παράμετρο, δηλαδή το string που περιέχει τους διαχωριστικούς χαρακτήρες.

Καλώντας την mb_strtok()ξανά και με τις δύο παραμέτρους, επαναφέρει τις αρχικές ρυθμίσεις και ξεκινά νέος γύρος κομματιάσματος του νέου string.

Χρησιμοποιείτε αυτή την function όπως θα χρησιμοποιούσατε την strtok(), για παράδειγμα μέσα σε ένα while loop. Η function επιστρέφει boolean false όταν δεν υπάρχουν άλλα κομμάτια να επιστρέψει.

Μπορεί να προσέξατε ότι η σειρά των παραμέτρων είναι αντεστραμμένη σε σχέση με την strtok(). Αυτό το έκανα για να κρατήσω τον κώδικα απλοποιημένο και να αποφύγω την χρήση της func_get_args() που θα περιέπλεκε τον κώδικα.

You might be interested in …

Free Open Source Exchange Rates for PHP

English, PHP

Inspired by the Open Source Exchange Rates and money.js, I’ve developed a PHP class that consumes the openexchangerates.org service. Since the service fetches the exchange rates from the (unofficial) Google Calculator API, I played around with it as well, and found some differences on the exchange rates provided by the two services. It is probably […]

Read More

mb_strtok() – A PHP implementation

PHP

While developing a web app, I needed to use the php’s multibyte family of functions. Having to deal with Greek characters specifically (although I always use utf-8) I needed the multibyte equivalent of strtok() to tokenize a stream of Greek characters. A quick look in the php documentation yielded almost every other function, but nothing […]

Read More

Δωρεάν Μετατροπή Συναλλάγματος Ανοιχτού Κώδικα για PHP

PHP, Ελληνικά

Εμπνευσμένος από το Open Source Exchange Rates και την βιβλιοθήκη money.js, δημιούργησα μία κλάση PHP που χρησιμοποιεί την υπηρεσία openexchangerates.org. Απ’ την στιγμή που έμαθα ότι η υπηρεσία αυτή “τραβάει” τις πληροφορίες της από το (ανεπίσημο) Google Calculator API, άρχισα να πειραματίζομαι και με αυτό, και βρήκα κάποιες διαφορές στις τιμές του συναλλάγματος που δίνουν […]

Read More

Leave a Reply

Your email address will not be published. Required fields are marked *