PHP:在第一个' - '之前删除所有内容

时间:2013-12-07 23:17:02

标签: php substr strpos strlen

我想从标题中删除一些文字(使用wordpress)。 示例:Alexandra Stan - Saxobeat先生 产出:Saxobeat先生

我尝试了很多代码,其中一项完美无缺:

$str = "this comes before – this comes after";
$char =  " - "; 
$strpos = strpos($str, $char); 
$str = substr($str, $strpos+strlen($char)); 
echo $str; 

但是经过多次尝试和上升...我在wordpress文章页面看到,当我在标题中键入“ - ”时,wordpress自动更改为:“ - ”谁与正常人不同(更大)一个“ - ”(用另一种字体复制,你会看到差异)。

我尝试将“ - ”替换为“ - ”,但输出为“ s之前 - 此后

谢谢!

4 个答案:

答案 0 :(得分:3)

这是你要替换的em dash。但是,你正在寻找一个常规的破折号。首先尝试通过这一堆代码运行字符串并阅读blog article我从

获取它

修改

一个完整的工作示例,基本上粘贴了博客文章中的示例代码,并修复了substr

的小错误
function scrub_bogus_chars(&$text) {
    // First, replace UTF-8 characters.
    $text = str_replace(
    array("\xe2\x80\x98", "\xe2\x80\x99", "\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x93",      "\xe2\x80\x94", "\xe2\x80\xa6"),
    array("'", "'", '"', '"', '-', '--', '...'),
    $text);

    // Next, replace their Windows-1252 equivalents.
    $text = str_replace(
    array(chr(145), chr(146), chr(147), chr(148), chr(150), chr(151), chr(133)),
    array("'", "'", '"', '"', '-', '--', '...'),
    $text);
}

// Original string (with em dash)
$text = "this comes before – this comes after";

// Ensure regular dashes will be available
scrub_bogus_chars($text);

// Lastly, extract the interesting part of the original string
$char   =  ' - ';
$strpos = strpos($text, $char); 
$text   = substr($text, $strpos + strlen($char)); 
echo $text . PHP_EOL; 

答案 1 :(得分:1)

你应该使用explode:

$str = "Alexandra Stan - Mr. Saxobeat ";
$char =  " - ";
$str = explode($char, $str);
echo $str[1];

返回

  

先生。 Saxobeat

答案 2 :(得分:0)

这不是正常的短划线-它是一个特殊的utf8字符。您需要在代码中使用特殊字符。使用explode()

$parts = explode(' – ', 'this comes before – this comes after');
echo $parts[1];

preg_match()

preg_match('~\– (.*)~', 'this comes before – this comes after', $matches);
echo $matches[1];

答案 3 :(得分:0)

下面:

echo explode($char, $str)[1];