【问题标题】:Replace items in the string for the exception of the last occurance将字符串中的项目替换为最后一次出现的异常
【发布时间】:2015-05-05 12:19:57
【问题描述】:

我有以下代码,它从我的 wordpress 博客中获取类别并用管道替换所有换行符。

<?php $variable = wp_list_categories('style=none&echo=0'); ?>
<?php $variable = str_replace('<br />', ' | ', $variable); ?>
<?php echo $variable; ?>

代码有效 - 但是我需要忽略最后一次出现。 有什么办法吗?

谢谢!

【问题讨论】:

  • 请在此处粘贴示例 HTML。

标签: php wordpress str-replace


【解决方案1】:

另一种方法是使用strrpos 获取最后一个管道| 字符,一旦找到,只需使用字符串索引将其删除,然后使用substr_replace 并再次将其替换为&lt;br/&gt;

$variable = str_replace(array('<br/>', '<br />', '<br>'), '|', $variable);
$last_pipe = strrpos($variable, '|');
if($last_pipe !== false) {
    $variable[$last_pipe] = ''; // remove
    $variable = substr_replace($variable, '<br/>', $last_pipe, 0); // replace
}
echo $variable;

Sample Output

旁注:这将是一个肮脏的解决方案,但如果你有更复杂的操作要做,最好只使用 HTML Parsers 这个,DOMDocument 特别是与 -&gt;replaceChild 结合使用回归。

$dom = new DOMDocument;
$dom->loadHTML($variable, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$br_tags = $dom->getElementsByTagName('br');
$i = $br_tags->length - 2; // -2 to leave the last one conversion
while($i > -1) {
    $br = $br_tags->item($i);
    $pipe = $dom->createTextNode('|');
    $br->parentNode->replaceChild($pipe, $br);
    $i--;
}

echo $dom->saveHTML();

Sample Output

【讨论】:

    【解决方案2】:

    试试rtrim()。它将从字符串中删除最后一个|

    echo rtrim($variable, '|');
    

    更新

    $str = "hhh|yyy|YY|ll";
    $last = strrpos($str, '|');
    $part = rtrim(substr($str, 0, $last), '|');
    if($last < strlen($str))
        $part .= substr($str, $last + 1), (strlen($str) -$last));
    
    echo $part;
    

    【讨论】:

    • 这不会涵盖所有的基础,如果&lt;br /&gt; 的最后一次出现在一些标签或文本的中间,这只会在最后一个&lt;br /&gt; 字面上是最后一部分时才有效的字符串,html字符串可以很复杂
    • @Ghost 在这种情况下它不起作用。那么必须做一些技巧。
    • @sgtBOSE - 我刚刚尝试了 rtrim 但没有任何区别:-/ ', ' | ', $variable); ?>
    【解决方案3】:

    当使用str_replace 和类别变量时,它返回类别| 管道在类别名称之前用空格分隔

    因此您可以删除最后两个字符,一个是space,第二个是| 管道。

    $variable = wp_list_categories('style=none&echo=0'); 
    $variable = str_replace('<br />', '|', $variable);
    var_dump($variable);
    echo substr($variable,0,strlen($variable)-2);
    

    如果您在类别名称前后使用带有空格的管道,则使用-4 而不是-2

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 2011-02-13
      相关资源
      最近更新 更多