2017-03-29 1 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

코드 샘플 입력이 :

$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 행 (공간트레이드 마크 기호에) 문자의 범위를 사용한다. 이 범위는 악센트가있는 문자 및 영어 이외의 문자가 포함 된 대다수의 단어 관련 문자를 포함해야하므로이 범위를 선택했습니다. (이 경우에는 단어와 관련이없는 문자가 많이 포함되어 있습니다. 예 : /[^\x{20}-\x{60}\x{7B}-\x{FF}]/ui - 공백 ~ 억음 악센트가인 경우이 검색 결과는 민감하지 않게 구별됩니다. 브래킷이 범위가 불필요하게 관대하거나 처리하는 데 시간이 너무 오래 걸리는 것을 발견하면 분음와 라틴어 소문자 y)를

에 적절한 문자 범위에 대한 자신의 결정을 내릴 수 있습니다.

는 예를 들어, 당신은이 훨씬 가볍고하지만 /[^\x20-\x7E]/u ( 물결 에 공간에서) 덜 관대 한 것 같아서. 그러나, 위의 두 언어 중 하나에 적용하면 $VideoTitles 정당한 문자를 제거하여 텍스트를 조작합니다.

여기에 언급 된 범위와 그 범위를 벗어나는 내용을 이해하는 데 도움이되는 menu of characters and their unicode numbers입니다.

* 닫는 구분 기호 뒤에 유니 코드 플래그 u을 포함해야합니다.


완성도를 위해, 나는 두 개의 그림 이모티콘을 제거하기위한 문자/좁은 솔루션이 될 것 말해야한다 :이 그림 이모티콘 "을 했 보드 (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; 

}

관련 문제