Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我想搜索我的数据库,而不是用正则表达式搜索字符串_Php_Sql_Regex - Fatal编程技术网

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

Php 我想搜索我的数据库,而不是用正则表达式搜索字符串,php,sql,regex,Php,Sql,Regex,我有这个代码来搜索hashtags,但这是一个字符串 <?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) {

我有这个代码来搜索hashtags,但这是一个字符串

<?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;
?>

但我想在从数据库中选择的文本中搜索hashtag。 例如
echo“”.nl2br(htmlentities($row['tekst']))。“

,以在我放入数据库的文本中搜索

<?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>";
        }
    }

}

?>

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

假设测试的文本是:“#1 en#2 als voorbeeld moeten niet werken maar#test,#l33t en#swag#420blazeit well。”

替换您的
echo“”.nl2br(htmlentities($row['tekst'])。“

与:

$test=$row['tekst'];
如果(preg_match_all(“/(^|\s)(#\w+/”,$test,$arrHashtags)>0){
foreach($arrHashtags[2]作为$strHashtag){
if(preg#u匹配('/#\d*[a-z#]+/i',$strHashtag)){
$test=str_replace($strHashtag,,$test);
}
}
}
编辑:删除htmlentities

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

”;
尝试使用explode和infrade这样的方法,因为我不擅长正则表达式:

<?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>";

    ?>


我同意您的
第一个代码块,这很清楚,但是
第二个代码块呢?我很想知道你想要什么?这是你尝试过的代码,但它不起作用吗?你能更清楚你想要什么吗(也许举个例子)。也许你的所有文本都是德语(对吧?)在
第二块中,这让你很难理解,也许你可以翻译一下?(特别是数组键和
echo
s)基本上,我想在我的博客中搜索hashtag,它适用于字符串。但是博客文本不是我的SQL数据库中的字符串。我不知道如何用这些文本搜索hashtags。我不明白你所指的区别。。。当您从数据库中获取数据时,它是一个字符串(特别是在没有类型的PHP中)。如果你没有得到一个字符串,你会得到一个数组,其中包含你想要的字符串(在一定深度)。您正在使用
$row
作为数组,每个列都作为键。要分析的字段是什么?它不是在数据库的一列中吗?它是我数据库中的一列,仍然会给我一些关于未定义变量$test的问题。无法确定如何定义它们。如果它位于列
tekst
中,则所需字符串必须位于
$row['tekst']
中。这不是你想要的吗?您的
echo“”.nl2br(htmlentities($row['tekst']))中打印的内容。“

?你没有得到你想要解析的字符串吗?如果,我应该把它放在哪里?只是换了它?有一个打字错误,一个
在第一行之后缺失。我修好了,是这个twitter.com/inhoud“>#inhoud twitter.com/lol”>#lol twitter.com/swag“>#swag twitter.com/420blazeit”>#420blazeit它没有链接。奇怪的是,它和你的第一个街区是一样的。。。如果你的第一块成功了,它也应该成功。。。你能
echo$row['tekst']吗请?如果它没有链接,你应该删除
htmlentities
,我认为这是为真正的所有标记打印的,这不是你想要的。唯一的区别(这可能是问题,也可能不是问题)是正则表达式在
#
之后定义接受的字符,其中你的方法接受每个字符,直到下一个空格。正则表达式只接受
[a-z]
,因此没有
CAPS
,也没有
-
。我看不到用爆炸/内爆方法做这些事情的方法。。。是吗?@Random不,但你仍然可以使用字符串来识别某些字符并避免它们,但这不是一个好主意。我在这里做的是,通过一些特定的假设,用最简单的方法获得解决方案。使用正则表达式是一种好的做法。是的,我同意,正则表达式是贪婪的,必须尽可能避免它们
<?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>";

    ?>