【问题标题】:put <em> and </em> in the beginning and end of each found keywords将 <em> 和 </em> 放在每个找到的关键字的开头和结尾
【发布时间】:2010-12-30 15:41:34
【问题描述】:

我是 preg 的新手,想在数组中找到一些字符串并强调每个字符串。

例如。

  array[0] = "windows";
  array[0] = "windows xp";

  text will be: <em>windows</em> is bla bla...<em>windows xp</em> is bla bla

我该怎么做?

【问题讨论】:

  • 这是你想要的搜索和替换类型的东西吗?如果是这样,它是纯文本还是 HTML?
  • 它是一个主体,我想用 php 找到它。一种用户输入一个关键字,我突出显示它。

标签: php string pcre


【解决方案1】:

非常简单的替换,不需要preg_*:

$mytest = "Windows XP was all right, but I like Windows 7 better!°";
$replacement = "Windows XP";
echo str_replace($replacement, "<em>".$replacement."</em>", $mytest);

您还可以替换数组。 [手动输入][1]

【讨论】:

  • $string = 'windows xp'; $string = '' 。 $字符串。 '';回声 $string;
  • 对不起。我更新了我的问题,因为我注意到我想在一个数组中找到相乘的字符串,而不是仅仅替换一个。
  • 但如果您要替换的是 HTML,最好更新您的问题。这其中有很多错综复杂的地方。
【解决方案2】:
$string = preg_replace("(windows( xp)?)", "<em>$0</em>", $string)

【讨论】:

    【解决方案3】:

    如果您正在对文本进行搜索和替换,这很容易:

    $text = 'windows xp';
    $input = '....';
    $output = str_replace($text, '<em>' . $text . '</em>', $input);
    

    如果您有一个 HTML 块存储为字符串,则需要考虑另一个问题:如果用户搜索的文本是标记或属性名称或值的一部分怎么办?如果你想突出“强”,你不想替换它:

    <strong>some text</strong>
    

    与:

    <<em>strong</em>>some text</<em>strong</em>>
    

    因为您的标记将不再有效。

    这就是在标记上使用简单的搜索和替换或正则表达式的问题。处理此问题的最佳方法是将标记转换为 DOM 树,然后在文本节点上对其进行替换。即使这样也有问题。如果要突出显示“windows xp”,是否要突出显示这种情况:

    windows <i>xp</i>
    

    对于用户来说,它显示为“windows xp”,因此可以合理地假设用户想要突出显示它。

    【讨论】:

    • 我想在文本中搜索我在数组中的关键字并突出显示它们。我看起来有很多事情要考虑,所以我不使用 html 标签运行 intp 问题。查看我更新的帖子..
    猜你喜欢
    • 2023-03-11
    • 2017-01-04
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2017-11-08
    相关资源
    最近更新 更多