当我的文字摘录的最后一个词有重音(奇怪的字符)时的问题

Ozz*_*zzC 3 php search

我正在做一个搜索系统,在这个系统中我显示搜索结果,但也有一些文本以搜索词开头.

但我有一个问题,我不知道如何解决它.

问题是:当我搜索某个单词并且我的文本的最后一个单词有一个重音时,最后一个单词看起来很奇怪,或者我有这个"&"或" ".

你能帮我理解这里有什么问题吗?

我的问题代码:

$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>';
Run Code Online (Sandbox Code Playgroud)

(并使用tinymce编辑器插入数据库)

使用tinymce在数据库中插入内容我这样做:

$f['content'] =$_POST['content'];
Run Code Online (Sandbox Code Playgroud)

然后我插入如下:

$insert->bindParam(4,$f['content']);
Run Code Online (Sandbox Code Playgroud)

Sam*_*ark 6

问题是您使用非多字节函数处理多字节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>';
Run Code Online (Sandbox Code Playgroud)

注意mb_*功能用法: