Nu sitter jag med ett lite irriterande problem. Jag försöker att räkna ord med str_word_count(), men i och med att den filtrerar bort alla tecken utanför a-z och 0-9 så blir det lite rumphugget resultat.
Jag har försökt att hitta någon enkel ersättare som tillåter hela UTF-8, men utan lycka.
Är man tvungen att ange samtliga tecken som ska tillåtas, eller kan man på något sätt utöka funktionen med en regular expression eller liknande?
Jag hittade ett förslag, men den tar inte med till exempel skiljetecken vilket gör att det faller rätt rejält om man vill skriva ut strängen som räknats efteråt.
define("WORD_COUNT_MASK", "/\p{L}[\p{L}\p{Mn}\p{Pd}'\x{2019}]*/u");
function str_word_count_utf8($string, $format = 0)
{
switch ($format) {
case 1:
preg_match_all(WORD_COUNT_MASK, $string, $matches);
return $matches[0];
case 2:
preg_match_all(WORD_COUNT_MASK, $string, $matches, PREG_OFFSET_CAPTURE);
$result = array();
foreach ($matches[0] as $match) {
$result[$match[1]] = $match[0];
}
return $result;
}
return preg_match_all(WORD_COUNT_MASK, $string, $matches);
}
Jag är väldigt osäker på regexp så ett tips på hur man kan utöka funktionen ovan så att den tar med allt i UTF-8 (eller åtminstone det mesta från Basic latin plus interpunktion) vore verkligen hjälpsamt.
Tack på förhand.