note 85579 added to function.str-word-count

From: 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

« previous php.notes (#144203) next »