我想搜索我的数据库而不是使用正则表达式的字符串

时间:2015-04-21 09:05:12

标签: php sql regex

我有这个代码来搜索主题标签,但这是一个字符串。

<?php
$test = '#1 en #2 als voorbeeld moeten niet werken maar #test, #l33t en #swag #420blazeit wel.';

if (preg_match_all('/(^|\s)(#\w+)/', $test, $arrHashtags) > 0) {
  foreach ($arrHashtags[2] as $strHashtag) {
    if (preg_match('/#\d*[a-z_]+/i', $strHashtag)) {
      $test = str_replace($strHashtag, '<a href="http://twitter.com/'.substr($strHashtag, 1).'">'.$strHashtag.'</a>', $test);
    }
  }
}

echo $test;
?>

但我想在从我的数据库中选择的文本中搜索主题标签。 例如echo "<p>".nl2br(htmlentities($row['tekst']))."</p>";,搜索我放入数据库的文本。

<?php

include_once('connection.class.php');

class ShowOne {

    private $db;

    public function __construct() {
        $this->db = new Connection();
        $this->db = $this->db->databaseConnection();
    }


    public function showOneItem() {
        $query = $this->db->prepare('SELECT * FROM blog WHERE id=:itemid AND geblokkeerd=0');
        $query->bindValue(":itemid", $_GET["item"], PDO::PARAM_STR);
        if($query->execute()) {
            if($query->rowCount() > 0) {
                while($row = $query->fetch()) {
                    echo "<div class='blog'>";
                    echo "<h2>".htmlentities($row['titel'])."</h2>";

                    echo "<table class='showtable'>";

                    echo "<tr><td>Eigenaar blog: </td><td>".htmlentities($row['author'])."</td></tr>";
                    echo "<tr><td>Geplaatst op: </td><td>".htmlentities($row['geplaatstdate'])."</td></tr>";
                    echo "<tr><td>Laatst geupdate op: </td><td>".htmlentities($row['updatedate'])."</td></tr>";
                    echo "<tr><td>Trefwoorden: </td><td>".htmlentities($row['trefwoorden'])."</td></tr>";

                    echo "</table><br />";

                    if ( !empty( $row['afbeelding'] ) ) {
                        echo '<img src="uploadedafb/'.htmlentities($row['afbeelding']).'"<br /><br />';
                    }

                    echo "<p>".nl2br(htmlentities($row['tekst']))."</p>";   

                    echo "<p>".nl2br(htmlentities($row['tekst']))."</p>"; 

                    echo "<br /><p><a class='linkover' href='index.php'><i class='fa fa-long-arrow-left'></i>Terug naar volledig overzicht</a></p>";
                    if(isSet($_SESSION["userid"])) {
                        if($_SESSION["rank"] > 2) { 
                            echo '<a href="bewerken.php?id='.$row["id"].'"><i class="fa fa-pencil"></i> Bewerken</a>'; 
                        } else if($_SESSION['userid'] == $row['userid']) {
                            echo '<a href="bewerken.php?id='.$row["id"].'"><i class="fa fa-pencil"></i> Bewerken</a>'; 
                        }
                    }

                    /*if($row['userid'] == $_SESSION['userid'] || $_SESSION['rank'] > 1) {
                        echo "Verwijder Blog";
                    }*/

                    echo "</div>";
                }
            } else {
                echo "<div class='error'><h3>Let op</h3>Er is geen blog gevonden.</div>";   
            }
        } else {
            echo "<div class='error'><h3>Let op</h3>Er is iets fout gegaan met het ophalen van de blog.</div>";
        }
    }

}

?>

2 个答案:

答案 0 :(得分:0)

如果我明白你想要什么,你应该这样做:

假设测试的文本是:&#39;#1 en#2 als voorbeeld moeten niet werken maar #test,#l33t en #swag#420blazeit wel。&#39;

替换您的echo "<p>".nl2br(htmlentities($row['tekst']))."</p>"; 用:

$test = $row['tekst'];
if (preg_match_all('/(^|\s)(#\w+)/', $test, $arrHashtags) > 0) {
  foreach ($arrHashtags[2] as $strHashtag) {
    if (preg_match('/#\d*[a-z_]+/i', $strHashtag)) {
      $test = str_replace($strHashtag, '<a href="http://twitter.com/'.substr($strHashtag, 1).'">'.$strHashtag.'</a>', $test);
    }
  }
}

编辑:删除了htmlentities

echo "<p>".nl2br($test)."</p>";

答案 1 :(得分:0)

尝试使用爆炸和内爆这样的东西,因为我在正则表达式方面不擅长:

<?php 

 $test1="";
    $test= '#1 en #2 als voorbeeld moeten niet werken maar #test, #l33t en #swag #420blazeit wel.';// this string is for example you need to use $row['tekst'] instead of this
//$test = $row['tekst']; //un-comment it for your use
    $arrHashtags=explode('#',$test);
        foreach ($arrHashtags as $strHashtag) {
            if(isset($strHashtag) && strlen($strHashtag) > 0){
            $arrHas=explode(' ',$strHashtag);
            $zero=$arrHas[0];
            unset($arrHas[0]);
                $test1.= '<a href="http://twitter.com/'.$zero.'">'.implode(' ',$arrHas).'</a>';
            }
        }

    echo "<p>".nl2br(htmlentities($test1))."</p>";

    ?>