1

多くの結果が見つかりましたが、何らかの理由で何もうまくいきません! preg_replace正規表現も試しましhtml_entity_decodeたが、うまくいきません...

ハッシュマークのプレフィックスが付いた単語を選択したいのですが#WORD、これは問題なく機能しますが、ハッシュマークが と読み取られて読み‏#WORD飛ばされることがあります。

例: This is a normal #hash_mark but ‏#this_isn't

表示どおり: ここに画像の説明を入力

ハッシュマークプレフィックスを持つ単語を選択するために使用する正規表現'~(?<=\s|^)#[^\s#]++~um'


重複としてマークされた質問では、画像に見られるように、回答は Unicode テキストでは機能しません。ここに画像の説明を入力


このコードは、Unicode テキストを含むすべての特殊文字を削除します。必要なのは&rlm;#、を通常の文字に置き換えることだけです。#

function remove_special_char($sentence){    
    return preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s','',$sentence);                  
}

echo remove_special_char("hello مرحبا привет שלום");

出力:

hello
4

1 に答える 1

1

2 つの異なる文字がありまし ここに画像の説明を入力

何が起こったのかを正確に見てみましょう。デバッグを行いました

        var_dump(ord('‏#')); //return ASCII value of this char
        $str1 = 'This is character 226 ‏#';

        $str1v1 = preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $str1);

        var_dump(ord('#')); //return ASCII value of second char
        $str2 = "This is character 35 #";

        $str2v1 = preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $str2);


        var_dump($str1v1);
        var_dump($str2v1);

        var_dump($str1);
        var_dump($str2);

出力:

int 226
int 35
string 'This is character 226 ' (length=22)
string 'This is character 35 ' (length=21)
string 'This is character 226 â€#' (length=26)
string 'This is character 35 #' (length=22)

おそらく、あなたまたはあなたのエンドユーザーがどこかにコピーして貼り付けて、あなたが説明したような変換された文字コードを含めたのでしょう(&rlm;#)。それらは同じ表面にレンダリングされるため、混乱します。

これらの文字からエスケープするために、次の行で正規表現を使用しました

preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $str1);

正規表現はPHP から取得されました 文字列から特殊文字を削除します

于 2013-07-31T14:12:08.253 に答える