我正在做一个搜索系统,在这个系统中我会显示搜索结果,但也会显示一些以搜索词开头的文本。
但是我遇到了一个问题,我不知道如何解决它。
问题是:当我搜索某个单词并且我的文字的最后一个单词有一个重音时,最后一个单词看起来很奇怪,或者我有这个"&"或�"。
你能帮我理解这里有什么问题吗?
我的问题代码:
$search = $url[1];
$read = $pdo->prepare("SELECT * FROM pages WHERE title LIKE ? OR content LIKE ? LIMIT ?,?");
$read->bindValue(1, "%$search%", PDO::PARAM_STR);
$read->bindValue(2, "%$search%", PDO::PARAM_STR);
$read->bindParam(3, $begin,PDO::PARAM_INT);
$read->bindParam(4, $max,PDO::PARAM_INT);
$read->execute();
$searchPos = stripos($result['content'],$search);
$searchLen = strlen($search);
$result_text = '"'.substr($result['content'], $searchPos, $searchLen + 35).'..."';
echo '<p>'.strip_tags($result_text).'</p>';
(我使用tinymce编辑器插入数据库)
使用tinymce在数据库中插入内容我这样做:
$f['content'] =$_POST['content'];
然后我插入如下:
$insert->bindParam(4,$f['content']);
答案 0 :(得分:5)
问题是您正在使用非多字节函数处理多字节UTF-8字符串。
您的代码经过修改后可以正常使用UTF-8:
$search = $url[1];
$read = $pdo->prepare("SELECT * FROM pages WHERE title LIKE ? OR content LIKE ? LIMIT ?,?");
$read->bindValue(1, "%$search%", PDO::PARAM_STR);
$read->bindValue(2, "%$search%", PDO::PARAM_STR);
$read->bindParam(3, $begin,PDO::PARAM_INT);
$read->bindParam(4, $max,PDO::PARAM_INT);
$read->execute();
$searchPos = mb_stripos($result['content'],$search,0,'utf-8');
$searchLen = mb_strlen($search,'utf-8');
$result_text = '"'.mb_substr($result['content'], $searchPos, $searchLen + 35, 'utf-8').'..."';
echo '<p>'.strip_tags($result_text).'</p>';
注意mb_*
函数用法:
答案 1 :(得分:-1)
Opton 1,3和5将在很大程度上解决这个问题。
答案 2 :(得分:-1)
在脚本的最后一行使用htmlentities函数。
echo '<p>'.htmlentities($result_text,ENT_QUOTES,"UTF-8").'</p>';
这应该可以解决这个奇怪的角色。问题:P