4

我对 str_replace 有一个非常微不足道的问题。

我有一个带有 En Dash 字符( - )的字符串,如下所示:

I want to remove - the dash

html输出是

I want to remove the – the dash

我想做这个:

$new_string = str_replace ('-','',$string);

我试图用 html_entity_decode 解析字符串,用 htmlspecialchars 解析要删除的字符,但没有任何结果。

我做错了什么?

-EDIT- 这是我的脚本的完整代码:

$title = 'Super Mario Galaxy 2 - Debut Trailer'; // Fetched from the DB, in the DB the character is - (minus) not –

$new_title = str_replace(' - ', '', $title);
$new_title = str_replace(" - ", '', $title);
$new_title = str_replace(html_entity_decode('–'),'',$title);

没有人工作。基本上问题在于,在数据库中,破折号存储为“减号”(我用减号键输入值),但出于奇怪的原因,输出是 –

我在 Wordpress 上运行,字符集是 UTF-8,数据库排序规则也是如此。

4

8 回答 8

9

尝试这样的事情:

str_replace(html_entity_decode('–', ENT_COMPAT, 'UTF-8'), '', $string);

我的猜测是它不是真正的 ndash,而是一个非常相似的角色。我建议提取字符串中每个字符的字节值以查看它的样子:

function decodeString($str) {
    //Fix for mb overloading strlen option
    if (function_exists('mb_strlen')) { 
        $len = mb_strlen($str, '8bit');
    } else {
        $len = strlen($str);
    }
    $ret = '';
    for ($i = 0; $i < $len; $i++) {
        $ret .= dechex(ord($str[$i])).' ';
    }
    return trim($ret);
}

这会将字符串转换为单独的字节编码(将其转换为像48 65 6C 6C 6F( Hello) 这样的十六进制字符串。检查两种情况下的破折号实际上是同一个字符。如果您在破折号所在的位置看到“2D”,那就是文字减号...如果您看到三个字节序列E2 80 93,那就是&ndash;。其他任何内容都表示不同的字符...

编辑: 如果你看到26 6E 64 61 73 68 3Bmens a literal &ndash;,那么你需要这样做str_replace('&ndash;', '', $str);

于 2010-07-02T20:34:30.000 回答
3

我已经设法通过调用remove_filter( 'the_title', 'wptexturize' );functions.php来做到这一点,然后你通过“-”号执行一个str_replace或任何事情;

于 2012-09-19T17:11:09.200 回答
1

&ndash;(-) 和减号(-)。确保您没有尝试替换错误的字符。

于 2010-07-02T19:38:35.393 回答
1

我尝试了一切,但没有任何效果。但最终在http://www.ascii.cl/htmlcodes.htm的帮助下

这段代码对我有用

        $arr1 = explode(",","0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F");
        $arr2 = explode(",","B,C,D,E,F");

        foreach($arr2 as $t1){
            foreach($arr1 as $t2){
                $val = $t1.$t2;
                $desc = str_replace(chr(hexdec($val)),"",$desc);
            }   
        }

        // if need removing individual value
        $desc = str_replace(chr(hexdec('A2')),"",$desc);
于 2013-09-25T03:27:55.003 回答
0

试试这个:

$new_string = str_replace('&ndash;','',$string);

或者:

$new_string = str_replace(html_entity_decode('&ndash;'),'',$string);

它与以下内容基本相同:

$new_string = str_replace ('-','',$string);
于 2010-07-02T19:01:06.153 回答
0

这是我对无效 ndash 的解决方案:

$string = str_replace(chr(hexdec('3f')), '-', $string);
于 2012-05-22T07:27:55.640 回答
0

只有这个解决方案对我有用:

$string = str_replace("\x96", "-", $string);
于 2013-09-27T12:44:56.830 回答
0

对于尝试了上述所有方法但仍然没有乐趣的任何人,这对我有用(来自 WordPressget_the_title()功能)

$new_string = str_replace('&#8211;', 'or', $string);
于 2017-10-05T12:11:31.733 回答