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 …

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

Integrating CodeIgniter and MagpieRSS

CodeIgniter, PHP

So you want to use MagpieRSS from within CodeIgniter, so that you can fetch some feeds and do naughty stuff with them. No problemo. You download Magpie and you find that there are a few required files that depend on each other, and have an extension of .inc instead of the more common .php. Renaming […]

Read More

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

Leave a Reply

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