Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: strpos

mam takie zdanie:

Kupując preparaty do włosów, mamy podany składnik. Często nie wiemy jak działają na nasze włosy, kierujemy się…ładnym zapachem, ceną. Jest to zła droga do pięknych włosów. Odżywka może pomóc, albo zaszkodzić, gdy nie będzie dobrze wybrana.

szukamy słowa Włos którego nie powinno odszukać (takich słów których szukamy jest dużo .... )

cała metoda wygląda tak


function scan_desc_tag($id,$parent)
{
echo $id."-".$parent;
echo "<BR>";
//zastepujemy
$db = new other_sql();
//Pobieram obramiany art
$desc .= $db->MysqlGetOne("SELECT html_max FROM `modules_desc` WHERE act=1 and parent='".$parent."' and id='".$id."' ");
$desc .= " ";
//tagi
$ctag = $db->MysqlGetOne("SELECT count(*) FROM `tag` WHERE act=1 and count!=0");
$atag = $db->sqlQuery("SELECT count,tag FROM `tag` WHERE act=1 and count!=0 and id !='2824' ORDER by count DESC ");
//tworzymy array z tagami ktore sa w tekscie 1 super tag 1 sredni.

while ($row = mysql_fetch_assoc($atag))
{
$matches = array();
preg_match_all('/(^|\b)' . $row['tag'] . '($|\b)/iu', $desc, $matches[$row['id']], PREG_OFFSET_CAPTURE);
if ($matches[$row['id'] ] [0][0][0] !='')
{

$tag_tmp[$row['tag']] = $row['tag'] ;
}
}

print '<PRE>';
print_r($tag_tmp);
print '</PRE>';

$array_max = array_splice($tag_tmp,0,1);
$array_min = array_rand($tag_tmp, 2);
$array_literal = array_values(array_merge_recursive($array_max,$array_min));


$desc1 = preg_replace('/('.$array_literal[0].')/i', '<a href="tag,'.str_replace(' ', '+',$array_literal[0]).'.html">$1</a>', $desc, 1);
$desc2 = preg_replace('/('.$array_literal[1].')/i', '<a href="tag,'.str_replace(' ', '+',$array_literal[1]).'.html">$1</a>', $desc1, 1);
$desc3 = preg_replace('/('.$array_literal[2].')/i', '<a href="tag,'.str_replace(' ', '+',$array_literal[2]).'.html">$1</a>', $desc2, 1);

return $desc3;
}


Jak printuje tag_tmp to mam tam


...
[Włos] => Włos
...


Wklejam tylko kawałek tekstu który przeszukuję... Ale np mam w nim też słowo Algi i też go szukam i tu znajduję i tak ma być ale słowa 'włos' nie może odnajdywać.

może źle korzystam z Twojego kodu.
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: strpos

dodam tylko, że całkowity wynik tagów jaki znalazł mój skrypt to:


[Włos] => Włos
[Włosy] => Włosy
[Olej] => Olej
[Witaminy] => Witaminy
[Wzrost] => Wzrost
[Brąz] => Brąz
[Mieszki włosowe] => Mieszki włosowe
[Proteiny] => Proteiny
[Henna] => Henna
[Serum] => Serum
[Keratyna] => Keratyna
[Cytryna] => Cytryna
[Jedwab] => Jedwab
[Zioła] => Zioła
[Rumianek] => Rumianek
[Pokrzywa] => Pokrzywa
[Mięta] => Mięta
[Mleko] => Mleko
[Ceramidy] => Ceramidy
[Algi] => Algi
[Chmiel] => Chmiel
[Jasny kolor] => Jasny kolor
[Naturalne składniki] => Naturalne składniki
[Dąb] => Dąb

konto usunięte

Temat: strpos

Zamiast

\b

wstaw

[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ]

W twoim przykładzie "ó" pasuje do "\b"Łukasz K. edytował(a) ten post dnia 30.09.11 o godzinie 21:16
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: strpos

bez zmian :(


preg_match_all('/(^|[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ])' . $row['tag'] . '($|[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ])/iu', $desc, $matches[$row['id']], PREG_OFFSET_CAPTURE);



mam słowo włosów i ta metoda co wklejam z tego słowa robi <a href="">włos</a>ów

konto usunięte

Temat: strpos

Prawdę mówiąc to teraz nie wiem skąd Ci się te znaczniki tam biorą. Może ktoś inny rzuci na to okiem, bo ja jestem zmęczony, ale wg mnie powinno robić.
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: strpos

biorą sie bo


$atag = $db->sqlQuery("SELECT count,tag FROM `tag` WHERE act=1 and count!=0 and id !='2824' ORDER by count DESC ");


to listuje mi 5 tys tagów kązdy z tych 5 tys tagów muszę przeszukać w treści danego artykułu i jak coś znajdę w tym art, robie z tego link....

szukamy włowa włos znajdzie włosów i robi linka z polowy wyrazu to samo jak np
szukamy słowa ser znajdzie serum... itp

Więc jak widzisz problem niby banalny ale ....

konto usunięte

Temat: strpos

Pewnie kodowanie tekstu zwracanego przez bazę jest inne niż pliku.

Zapewnij, że:
- kodowanie pliku jest w UTF-8 (bez BOM)
- wywołujesz SET NAMES UTF8 (w MySQL)

Potem:

$pattern = '/(^|[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ])(' . $word . ')($|[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ])/iu';

musi działać.

Dodaj nawiasy okalające poszukiwane słowo - łatwiej będzie Ci je wyłuskać.
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: strpos

utf8 jest wywołuję.

dalej nie działa.

ale działa to jeszcze sprawdzam inne warianty czy sie nie sypie.



preg_match_all('/(' . $string . ')[- _]/i', $desc, $matches[$row['id']], PREG_OFFSET_CAPTURE);

konto usunięte

Temat: strpos

"i"?
:)
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: strpos

iu ?

konto usunięte

Temat: strpos

Ile czasu zajęłoby Ci spróbowanie tego o co pytasz?
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: strpos

bez zmian i czy iu.

a komentarze które NIC nie wnoszą każdy może pisać...

konto usunięte

Temat: strpos

To, że masz coś zwalone w kodzie i nie potrafisz ustalić co, to już Twój problem i nikt za Ciebie nie będzie nad tym siedział.


<?php

$word = 'Włosów';
$word2 = 'Włos';

$pattern = '/(^|[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ])(' . $word . ')($|[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ])/iu';
$pattern2 = '/(^|[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ])(' . $word2 . ')($|[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ])/iu';

$text = 'Kupując preparaty do włosów, mamy podany składnik. Często nie wiemy jak działają na nasze włosy, kierujemy się ładnym zapachem, ceną. Jest to zła droga do pięknych włosów. Odżywka może pomóc, albo zaszkodzić, gdy nie będzie dobrze wybrana.';

preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE);
preg_match_all($pattern2, $text, $matches2, PREG_OFFSET_CAPTURE);


var_dump(
$matches,
$matches2
);


Output:


array(4) {
[0]=>
array(2) {
[0]=>
array(2) {
[0]=>
string(10) " włosów,"
[1]=>
int(21)
}
[1]=>
array(2) {
[0]=>
string(10) " włosów."
[1]=>
int(178)
}
}
[1]=>
array(2) {
[0]=>
array(2) {
[0]=>
string(1) " "
[1]=>
int(21)
}
[1]=>
array(2) {
[0]=>
string(1) " "
[1]=>
int(178)
}
}
[2]=>
array(2) {
[0]=>
array(2) {
[0]=>
string(8) "włosów"
[1]=>
int(22)
}
[1]=>
array(2) {
[0]=>
string(8) "włosów"
[1]=>
int(179)
}
}
[3]=>
array(2) {
[0]=>
array(2) {
[0]=>
string(1) ","
[1]=>
int(30)
}
[1]=>
array(2) {
[0]=>
string(1) "."
[1]=>
int(187)
}
}
}
array(4) {
[0]=>
array(0) {
}
[1]=>
array(0) {
}
[2]=>
array(0) {
}
[3]=>
array(0) {
}
}


Jak widać "Włosów" złapał, "Włos" nie złapał. Pisałeś, że tak ma działać i tak działa.

EOT.
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: strpos

prawie dobrze.

zmieniłe na


$pattern = '/(^|[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ])(' . $row['tag'] . ')($|[^a-ząćęłóńźżśĄĆĘŁÓŃŻŹŚ&])/iu';


dodałem "&" ze nie moze być na końcu.

bo np Włosów w kodzie wygląda tak : "włosów|"

dzieki
Piotr Stanek

Piotr Stanek Programista PHP /
JS developer

Temat: strpos

zamiast tej kreseczki jest litera ó potraktowana jak znak specjalny



Wyślij zaproszenie do