Oppure

Loading
22/06/12 19:41
riddick
Salve a tutti, in pratica ho questo problema, riesco a parsare i testi e a individuare quello che mi serve ovvero il nome preceduto da #, tipo #nomecognome, solo che alcune volte mi prende e converte questi tag in link e altre volte no. Il fatto strano è che, siccome ho un sistema di notifiche quando si tagga una persona, la notifica ti tag arriva, solo che non mi sostituisce il #nomecognome con il relativo link al profilo. Qui il codice e per qualsiasi cosa se non mi sono spiegato ve la dico:

public function GetTag ($text) { 
        $matches = array(); 
          $replacements = array(); 
          preg_match_all('/#([^s]+)/', $text, $matches); 
         
        $this->DBConnect(); 
        $sql = mysql_query("SELECT * FROM users"); 
        while ($rows = mysql_fetch_array($sql)) { 
            for ($j = 0, $c = count($matches[1]); $j < $c; $j++) { 
                $str = strtolower(str_replace(' ', '', $this->GetNameSurname($rows['id']))); 
                if ($str == $matches[1][$j]) { 
                    $replacements[$j] = "<a href='profile.php?user=".$rows['id']."'>".$this->GetNameSurname($rows['id'])."</a>"; 
                } else { 
                    $replacements[$j] = $matches[1][$j]; 
                } 
            } 
        } 
        for ($j = 0, $c = count($matches[1]); $j < $c; $j++) 
            $text = str_replace($matches[1][$j], $replacements[$j], $text); 

          return $text; 
         
    }
aaa
22/06/12 20:23
pierotofy
Mm, probabilmente l'errore e' qui:

if ($str == $matches[1][$j]) {


Non dovrebbe essere:

if ($str == strtolower($matches[1][$j])) {


?

Ma ti consiglierei di riscrivere il codice da zero cambiando preg_match_all con questa: php.net/manual/en/…
Il mio blog: piero.dev
22/06/12 20:31
riddick
Ti ringrazio della risposta, appena sono sull'altro pc provo, e nel caso riscrivo il codice come da te consigliato! Farò sapere come è andata
aaa
23/06/12 8:51
riddick
Allora, la modifica suggerita mi era utile se uno scriveva il nome con lettere differenti dal minuscolo e fin qui tutto ok, però il problema principale persiste, facendo un var_dump($replacements) si vede che viene creato un array un elemento giusto, ovvero quando trova l'utente e quindi aggiunge il tag <a>, e altri elementi composti dalla stringa così com'è. Il mio dubbio è che, o non cicla bene il db, però nell'array lo trova l'utente e aggiunge il tag, o, più probabile, sbaglio qualcosa nell'ultimo for, cioè dove vado a sostituire realmente la stringa, solo che non riesco ad individuarlo questo errore.
aaa