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 で解析しようとしましたが、結果はありませんでした。

私が間違っていることは何ですか?

-編集-これは私のスクリプトの完全なコードです:

$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);

誰も働きません。基本的に問題は、ダッシュが「マイナス」としてDBに保存されていることです(マイナスキーで値を入力します)が、奇妙な理由で出力は &ndash ; です。

私はWordpressで実行しており、文字セットはDB照合と同じ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(のような 16 進文字列に変換されますHello)。どちらの場合もダッシュが実際には同じ文字であることを確認します。ダッシュがある場所に「2D」が表示されている場合、それはリテラル マイナス記号... 3 バイト シーケンス が表示されている場合E2 80 93&ndash;それは です。それ以外は別の文字を意味します...

編集: そして、26 6E 64 61 73 68 3Bその mens aliteralが表示された場合&ndash;は、そうする必要がありますstr_replace('&ndash;', '', $str);

于 2010-07-02T20:34:30.000 に答える
3

functions.phpを呼び出すことでこれを行うことができました。その後、「-」記号で何かremove_filter( 'the_title', 'wptexturize' );を実行します。str_replace

于 2012-09-19T17:11:09.200 に答える
1

&ndash;(–) とマイナス記号 (-)があります。間違った文字を置き換えようとしていないことを確認してください。

于 2010-07-02T19:38:35.393 に答える
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 に答える