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