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

时间:2014-09-04 03:15:56

标签: 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>';

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

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

$f['content'] =$_POST['content'];

然后我插入如下:

$insert->bindParam(4,$f['content']);

3 个答案:

答案 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)

  1. 确保您的文件以utf-8(utf-8无BOM)编码保存,任何高级编辑器都可以选择更改文件编码,notepad ++在其主菜单中有此选项。
  2. 确保您的表格编码为utf8,例如utf8_general_ci
  3. 在dabatase连接字符串中添加charset = utf8,或者如果您使用的是php 5.3.6或更早版本,请使用&#39; SET NAMES utf8&#39;在你的询问之前。
  4. 在php标头,html等中设置字符编码
  5. 使用php多字节字符串函数进行字符串搜索,比较等。
  6. Opton 1,3和5将在很大程度上解决这个问题。

答案 2 :(得分:-1)

在脚本的最后一行使用htmlentities函数。

echo '<p>'.htmlentities($result_text,ENT_QUOTES,"UTF-8").'</p>';

这应该可以解决这个奇怪的角色。问题:P