2017-03-29 23 views
1

文字列のように文字を置き換えるにはどうすればよいですか?いつかYouTubeのビデオタイトルにはこのような文字が含まれています。私は!@#$%^ & *()のような文字を置き換えたくありません。私は現在、preg_replace('/[^A-Za-z0-9\-]/', '', $VideoTitle);文字列以外の文字をPHPから削除する方法

サンプルアレイを使用しています

$VideoTitles[]='Sia 2017 Cheap Thrills 2017 live '; 

$VideoTitles[]='TAYLOR SWIFT - SHAKE IT OFF #1989'; 

予想される出力:

Sia 2017 Cheap Thrills 2017 live 
TAYLOR SWIFT - SHAKE IT OFF #1989 

答えて

1

コードサンプル入力を持つ:Demo

$VideoTitles=[ 
    'Kilian à Dijon #4 • Vlog #2 • Primark again !? - YouTube', 
    'Funfesty on Twitter: "Je commence à avoir mal à la tête à force', 
    'Sia 2017 Cheap Thrills 2017 live ' 
]; 

$VideoTitles=preg_replace('/[^ -\x{2122}]\s+|\s*[^ -\x{2122}]/u','',$VideoTitles); // remove out of range characters and whitespace character on one side only 

var_export($VideoTitles); 

出力:

array (
    0 => 'Kilian à Dijon #4 • Vlog #2 • Primark again !? - YouTube', 
    1 => 'Funfesty on Twitter: "Je commence à avoir mal à la tête à force', 
    2 => 'Sia 2017 Cheap Thrills 2017 live', 
) 

上記正規表現パターンは\x20-\x2122空間にトレードマーク記号)から文字の範囲を使用します。アクセント記号や英語以外の文字を含む単語関連の文字の大部分をカバーする必要があるため、この範囲を選択しました。 (確かに、それはまた、多くの非単語に関連する文字を含んでいるあなたが好きな大きな特異のための2つの別々の範囲を使用したい場合があります。/[^\x{20}-\x{60}\x{7B}-\x{FF}]/ui - この大文字と小文字を区別せずに二つの範囲を検索:スペースに重大なアクセントは、巻き毛を残しましたブラケットダイエレシスにラテン小さな文字y)

あなたはこの範囲が不必要に寛大であるか、処理に時間がかかりすぎることが判明した場合、あなたは適切な文字の範囲についての独自の判断を下すことができます。

はたとえば、あなたははるかに軽いが、/[^\x20-\x7E]/uチルダにスペースから)あまり寛大好きかもしれません。しかし、それを私の上のフランス語の$VideoTitlesのいずれかに当てはめると、合法的な手紙を取り除くことによってそのテキストをマングルすることになります。

ここには上記の範囲内とそれを超えたものを理解するのに役立つmenu of characters and their unicode numbersがあります。

*また、区切り記号の後にユニコードフラグuを含めることを忘れないでください。


完全を期すために、私は2個の絵文字を除去するためにリテラル/狭いソリューションは以下のようになり言う必要があります。これらの絵文字は「カチンコ(U + 1F3AC)」と「ヘッドフォンと呼ばれている

$VideoTitle=preg_replace('/[\x{1F3A7}\x{1F3AC}]/u','',$VideoTitle); // omit 2 emojis 

( U + 1F3A7)」。

0
function removeEmoticon($text) { 

$cleanText = ""; 

// Match Emoticons 
$regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u'; 
$cleanText  = preg_replace($regexEmoticons, '', $text); 

// Match Miscellaneous Symbols and Pictographs 
$regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u'; 
$cleanText = preg_replace($regexSymbols, '', $cleanText); 

// Match Transport And Map Symbols 
$regexTransport = '/[\x{1F680}-\x{1F6FF}]/u'; 
$cleanText  = preg_replace($regexTransport, '', $cleanText); 

// Match Miscellaneous Symbols 
$regexMisc = '/[\x{2600}-\x{26FF}]/u'; 
$cleanText = preg_replace($regexMisc, '', $cleanText); 

// Match Dingbats 
$regexDingbats = '/[\x{2700}-\x{27BF}]/u'; 
$cleanText = preg_replace($regexDingbats, '', $cleanText); 

return $cleanText; 

}

関連する問題