J'essaie d'extraire tous les mots d'une chaîne dans un tableau, mais j'ai des problèmes avec les espaces (
).Problème lors de la tentative d'extraction des mots d'une chaîne dans PHP
C'est ce que je fais:
//Clean data to text only
$data = strip_tags($data);
$data = htmlentities($data, ENT_QUOTES, 'UTF-8');
$data = html_entity_decode($data, ENT_QUOTES, 'UTF-8');
$data = htmlspecialchars_decode($data);
$data = mb_strtolower($data, 'UTF-8');
//Clean up text from special chrs I don't want as words
$data = str_replace(',', '', $data);
$data = str_replace('.', '', $data);
$data = str_replace(':', '', $data);
$data = str_replace(';', '', $data);
$data = str_replace('*', '', $data);
$data = str_replace('?', '', $data);
$data = str_replace('!', '', $data);
$data = str_replace('-', ' ', $data);
$data = str_replace("\n", ' ', $data);
$data = str_replace("\r", ' ', $data);
$data = str_replace("\t", ' ', $data);
$data = str_replace("\0", ' ', $data);
$data = str_replace("\x0B", ' ', $data);
$data = str_replace(" ", ' ', $data);
//Clean up duplicated spaces
do {
$data = str_replace(' ', ' ', $data);
} while(strpos($data, ' ') !== false);
//Make array
$clean_data = explode(' ', $data);
echo "<pre>";
var_dump($clean_data);
echo "</pre>";
Ce sorties:
array(58) {
[0]=>
string(5) " "
[1]=>
string(5) " "
[2]=>
string(11) "anläggning"
[3]=>
string(3) "med"
[4]=>
string(3) "den"
[5]=>
string(10) "erfarenhet"
[6]=>
string(3) "som"
}
Si je vérifie la source pour la sortie que je vois que les 2 premières valeurs du tableau est
.
Peu importe comment j'essaie, je ne peux pas enlever cela de la chaîne. Des idées?
MISE À JOUR:
Après quelques ajustements avec le code je parviens à obtenir la sortie suivante:
array(56) {
[0]=>
string(1) "�" //Notice change. Instead of string length 5 it now says 1. But still its garbage.
[1]=>
string(1) "�"
[2]=>
string(11) "anläggning"
[3]=>
string(3) "med"
[4]=>
string(3) "den"
[5]=>
string(10) "erfarenhet"
[6]=>
string(3) "som"
[7]=>
string(5) "finns"
[8]=>
string(4) "inom"
Merci!
ANSWER (pour les paresseux):
Même tu c'est une approche légèrement différente du problème, et il ne répond jamais vraiment pourquoi j'ai eu les problèmes que j'avais ci-dessus (comme les restes de
et d'autres supplémentaires bizarre espaces), j'aime bien et c'est beaucoup mieux que mon code original.
Merci à tous ceux qui ont contribué à cela!
//Clean data to text only
$data = strip_tags($data);
$data = html_entity_decode($data, ENT_QUOTES, 'UTF-8');
$data = htmlspecialchars_decode($data);
$data = mb_strtolower($data, 'UTF-8');
//Clean up text from special chrs
$data = str_replace(array("-"), ' ', $data);
$clean_data = str_word_count($data, 1, 'äöå');
echo "<pre>";
var_dump($clean_data);
echo "</pre>";
vous que les données réelles contient le (et non seulement la sortie générée par var_dump)? – JohnSmith
Quelqu'un va poster une version de ceci qui fait la même chose correctement dans environ 6 lignes :) – thirtydot
JohnSmith: Oui. Je reçois la même chose si je fais echo $ data [0] ou echo $ data [1]. – jamietelin