"®" kurtulmak için nasıl

3 Cevap php

I "Welcome to McDonalds®: I'm loving it™" ... Ben ":", "'", ® ve {[(4) kurtulmak ister gibi bir dize var ]} sembolleri. Ben bugüne kadar aşağıdaki denedim:

$string = "Welcome to McDonalds®: I'm loving it™";
$string = preg_replace('/[^a-zA-Z0-9 -]/', '', $string); 

Ama çıkışta alıyorum:

"Welcome to McDonaldsreg Im loving ittrade" ... yani preg_replace şekilde [(5)] ® 'reg' ve {dönüştürür }, hangi benim için iyi değildir ve böyle bir dönüşüm bütün olur, neden ben anlayamıyorum.

Nasıl bu dönüşüm kurtulurum?

Solved: fikirler için teşekkürler, çocuklar. Ben sorunu çözüldü:

$string = preg_replace(
    array('/[^a-zA-Z0-9 -]/', '/&[^\s]*;/'), 
    '', 
    preg_replace(
        array('/&[^\s]*;/'), 
        '', 
        htmlentities($string)
    )
);

3 Cevap

Muhtemelen dize entity şeklinde, yani ® edilir gerçekten ® özel karakterler yaşıyoruz. Bu yüzden yedek işlemi tarafından görülen değil.

Bunu düzeltmek için, &SOMETHING; için filtre olabilir substring ve bunları kaldırın. Orada yerleşik olabilir yöntemlerle bunu yapmak için, belki html_entity_decode.

Sadece belirtilen karakterleri değiştirmek isteyen varsa, kullanın

$cleaned = str_replace(array('®','™','®','™', ":", "'"), '', $string);

Düzenli dize değiştirme yöntemleri genellikle daha hızlı ve hiçbir şey in your example O Normal İfade motor desen eşleştirme güç gerekir değiştirmek istiyorum var.

EDIT due to comments: If you need to replace character patterns (as indicated by the solution you gave yourself), a Regex is indeed more appropriate and practical.

In addition, I'm sure McD requires both symbols to be in place if that slogan is used on any public website

® ®, ve ™ olduğu ™. Bu nedenle, aşağıda bir şey çıkarmak isteyeceksiniz
the pattern &[#0-9a-z]+; önce elden:

$input = "Remove all ™ and ® symbols, please.";
$string = preg_replace("/&[#0-9a-z]+;/i", "", $input);