php 中的搜索系统出现换行错误
line brek error with search system in php
我正在开发一个系统来搜索用户在 php 文件中键入的词,使用 PHP 而没有 MySQL 但我遇到了问题。当文件中没有换行符时,系统工作得非常好。例如,如果我在包含文本 "good morning" 的文件中搜索单词 "good" 可以正常工作,但如果我在包含文本 [=22= 的文件中搜索 "good" ] (带有换行符)它不会因此列出文件。这是我的代码:
index.php
<form action="busca.php" method="get">
<input type="text" name="s"><br>
<input type="submit">
</form>
busca.php
<?php
$pesq = (isset($_GET['s'])) ? trim($_GET['s']) : '';
if (empty($pesq)) {
echo 'Type something.';
} else {
$index = "index.php";
$busca = glob("posts/content/*.php", GLOB_BRACE);
$lendo = "";
$conteudo = "";
foreach ($busca as $item) {
if ($item !== $index) {
$abrir = fopen($item, "r");
while (!feof($abrir)) {
$lendo = fgets($abrir);
$conteudo .= $lendo;
$lendo .= strip_tags($lendo);
}
if (stristr($lendo, $pesq) == true) {
$dados = str_replace(".php", "", $item);
$dados = basename($dados);
$result[] = "<a href=\"posts/$dados.php\">$dados</a>";
unset($dados);
}
fclose($abrir);
}
}
if (isset($result) && count($result) > 0) {
$result = array_unique($result);
echo '<ul>';
foreach ($result as $link) {
echo "<li>$link</li>";
}
echo '</ul>';
} else {
echo 'No results';
}
}
?>
您对 stristr
的用法不正确。
将它与 false
进行比较,如下所示:
if (stristr($lendo, $pesq) !== false) {
如果找到一个字符串 — 函数 returns 子字符串。哪个可以转换为布尔值 true
或 false
,你永远不知道。如果它没有找到它 - 它 returns false
- 你应该将它与唯一正确的值进行比较。
为此使用 strpos
更好。
我的变体:
foreach ($busca as $item) {
if ($item !== $index) {
$lendo = file_get_contents($item);
$lendo = strip_tags($lendo);
if (strpos($lendo, $pesq) !== false) {
$dados = str_replace(".php", "", basename($item));
$result[] = "<a href=\"posts/$dados.php\">$dados</a>";
}
}
}
修复换行符 - 尝试摆脱它们
像这样:
$lendo = file_get_contents($item);
$lendo = strip_tags($lendo);
$lendo = str_replace(["\r","\n"], ' ', $lendo);
我正在开发一个系统来搜索用户在 php 文件中键入的词,使用 PHP 而没有 MySQL 但我遇到了问题。当文件中没有换行符时,系统工作得非常好。例如,如果我在包含文本 "good morning" 的文件中搜索单词 "good" 可以正常工作,但如果我在包含文本 [=22= 的文件中搜索 "good" ] (带有换行符)它不会因此列出文件。这是我的代码:
index.php
<form action="busca.php" method="get">
<input type="text" name="s"><br>
<input type="submit">
</form>
busca.php
<?php
$pesq = (isset($_GET['s'])) ? trim($_GET['s']) : '';
if (empty($pesq)) {
echo 'Type something.';
} else {
$index = "index.php";
$busca = glob("posts/content/*.php", GLOB_BRACE);
$lendo = "";
$conteudo = "";
foreach ($busca as $item) {
if ($item !== $index) {
$abrir = fopen($item, "r");
while (!feof($abrir)) {
$lendo = fgets($abrir);
$conteudo .= $lendo;
$lendo .= strip_tags($lendo);
}
if (stristr($lendo, $pesq) == true) {
$dados = str_replace(".php", "", $item);
$dados = basename($dados);
$result[] = "<a href=\"posts/$dados.php\">$dados</a>";
unset($dados);
}
fclose($abrir);
}
}
if (isset($result) && count($result) > 0) {
$result = array_unique($result);
echo '<ul>';
foreach ($result as $link) {
echo "<li>$link</li>";
}
echo '</ul>';
} else {
echo 'No results';
}
}
?>
您对 stristr
的用法不正确。
将它与 false
进行比较,如下所示:
if (stristr($lendo, $pesq) !== false) {
如果找到一个字符串 — 函数 returns 子字符串。哪个可以转换为布尔值 true
或 false
,你永远不知道。如果它没有找到它 - 它 returns false
- 你应该将它与唯一正确的值进行比较。
为此使用 strpos
更好。
我的变体:
foreach ($busca as $item) {
if ($item !== $index) {
$lendo = file_get_contents($item);
$lendo = strip_tags($lendo);
if (strpos($lendo, $pesq) !== false) {
$dados = str_replace(".php", "", basename($item));
$result[] = "<a href=\"posts/$dados.php\">$dados</a>";
}
}
}
修复换行符 - 尝试摆脱它们 像这样:
$lendo = file_get_contents($item);
$lendo = strip_tags($lendo);
$lendo = str_replace(["\r","\n"], ' ', $lendo);