note 85579 added to function.str-word-count
| From: | om+www dot php dot net at miakinen dot net | Date: | Sat, 06 Sep 2008 21:29:19 +0000 |
| Subject: | note 85579 added to function.str-word-count | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-144203@lists.php.net to get a copy of this message | ||
Here is a code for a function str_word_count() compatible with UTF-8. I'm sorry that the
comments are in French because I am not very good in English: anyway, these comments only try to
explain things that are in PCRE or Unicode documentations.
<?php
/*
* Explications du masque pour preg_match_all.
*
* La fonction str_word_count standard considère qu'un mot est
* une séquence de caractères qui contient tous les caractères
* alphabétiques, et qui peut contenir, mais pas commencer
* par "'" et "-".
*
* Avec Unicode et UTF-8, une lettre peut être un caractères
* ASCII non accentué tel que "e" ou "E", mais aussi un "é"
ou
* un "Ã", lequel peut se représenter sous la forme de deux
* caractères : d'abord le "E" non accentué, puis l'accent tout
* seul. Une lettre "E" ou "Ã" fait partie de la classe « L »,
* un accent de la classe « Mn ».
*
* Par ailleurs, "-" n'est plus le seul trait d'union possible.
* Plutôt que de les lister individuellement, j'ai choisi de
* tester les caractères de la classe « Pd ». Un inconvénient
* est que cela inclut aussi le tiret cadratin et d'autres,
* mais cet inconvénient existait déjà avec str_word_count et
* le tiret ascii, et en outre il ne concerne pas le français
* (contrairement à l'anglais, il y a toujours des espaces
* autour de ces tirets).
*
* Enfin, "'" n'est pas non plus la seule apostrophe possible.
* Mais contrairement aux tirets je teste juste l'apostrophe
* typographique U+2019 à part au lieu de tester la classe « Pf »
* car cette dernière contient trop de signes de ponctuation
* à exclure de la définition d'un mot.
*
* Un mot commence donc par une lettre \p{L}, éventuellement
* accentuée (suivie par un nombre quelconque de \p{Mn}), et
* ensuite on peut rencontrer un nombre quelconques d'autres
* lettres (\p{L} et \p{Mn}), de tirets (\p{Pd}) ou d'apostrophes
* (' et \x{2019}). Tout ceci, bien sûr, dans un masque compatible
* avec UTF-8 (/u à la fin).
*
* Pour les références, voir :
* http://fr2.php.net/manual/fr/regexp.reference.php
#regexp.reference.unicode
* http://fr2.php.net/manual/fr/reference.pcre.pattern.modifiers.php
*/
define("WORD_COUNT_MASK", "/\p{L}[\p{L}\p{Mn}\p{Pd}'\x{2019}]*/u");
function str_word_count_utf8($str)
{
return preg_match_all(WORD_COUNT_MASK, $str, $matches);
}
----
Server IP: 213.246.51.26
Probable Submitter: 87.231.120.194
----
Manual Page -- http://www.php.net/manual/en/function.str-word-count.php
Edit -- https://master.php.net/note/edit/85579
Del: integrated -- https://master.php.net/note/delete/85579/integrated
Del: useless -- https://master.php.net/note/delete/85579/useless
Del: bad code -- https://master.php.net/note/delete/85579/bad+code
Del: spam -- https://master.php.net/note/delete/85579/spam
Del: non-english -- https://master.php.net/note/delete/85579/non-english
Del: in docs -- https://master.php.net/note/delete/85579/in+docs
Del: other reasons-- https://master.php.net/note/delete/85579
Reject -- https://master.php.net/note/reject/85579
Search -- https://master.php.net/manage/user-notes.php