函数在给定字符串utf-8上设置特定单词的样式?

时间:2016-12-02 12:23:51

标签: php utf-8 preg-replace

如何设定给定字符串中的特定单词的样式? 我用一个函数来设置给定字符串中特定单词的样式,但这不适用于utf-8字符串

 header('Content-type: text/html; charset=utf-8');
function bold($string, $word)
{
    return preg_replace('/\b'.$word.'\b/', '<strong>'.$word.'</strong>', $string);
}

echo bold('چمستان تا', 'تا');

我该怎么做?我需要根据键入的用户查询在搜索结果中加粗一些关键字/短语

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

确保:

  • 您的网页以UTF8编码保存
  • 添加/u修饰符
  • 更好preg_quote搜索字以防万一

使用

preg_replace('/\b'.preg_quote($word,'/').'\b/u', '<strong>'.$word.'</strong>', $string);

作为\b的替代方法,您可以使用非模糊的单词边界(在允许搜索词之前或之后不使用单词char):

preg_replace('/(?<!\w)'.preg_quote($word,'/').'(?!\w)/u', '<strong>'.$word.'</strong>', $string);

或 - 在空格内强制执行匹配:

preg_replace('/(?<!\S)'.preg_quote($word,'/').'(?!\S)/u', '<strong>'.$word.'</strong>', $string);