PHP удаляет специальный символ из строки

У меня проблемы с удалением специальных символов. Я хочу удалить все специальные символы, кроме "()/.% - &", потому что я устанавливаю эту строку как заголовок.

Я отредактировал код с оригинала (смотрите ниже):

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

Но это не работает для удаления специальных символов, таких как: ",", "," " и другие.

исходный код: (это работает, но он удаляет эти символы: "()/.% - &" )

preg_replace('/[^a-zA-Z0-9_ -]/s', '', $String);

Ответ 1

Ваша точка соответствует всем символам. Выйдите из него (и другие специальные символы), например:

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

Ответ 2

preg_replace('#[^\w()/.%\-&]#',"",$string);

Ответ 3

Хорошая попытка! Я думаю, вам просто нужно сделать несколько небольших изменений:

  • Победите квадратные скобки ([ и ]) внутри класса символов (которые также обозначаются символами [ и ])
  • Выйти из escape-символа (\)
  • Плюс там quirk, где - является особенным: если он находится между двумя символами, это означает диапазон, но если он в начале или в конце, это означает буквальный символ -.

Вам нужно что-то вроде этого:

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

Смотрите http://docs.activestate.com/activeperl/5.10/lib/pods/perlrecharclass.html#special_characters_inside_a_bracketed_character_class, если вы хотите прочитать дальше по этой теме.

Ответ 4

Вы хотите str replace, потому что по производительности он намного дешевле и по-прежнему подходит вашим потребностям!

$title = str_replace( array( '\'', '"', ',' , ';', '<', '>' ), ' ', $rawtitle);

(Если это не касается безопасности и SQL-инъекции, в этом случае я бы предпочел пойти с ПОЗИТИВНЫМ списком ДОПОЛНИТЕЛЬНЫХ символов... еще лучше, придерживаться проверенных проверенных процедур.)

Btw, так как OP говорил о настройке заголовка: я бы не заменил специальные символы ничем, а пробелом. Сверхплошное пространство - это не проблема, а два слова, склеенные вместе...

Ответ 5

<?php
$string = '`[email protected]#$%^&^&*()_+{}[]|\/;:"< >,.?-<h1>You .</h1><p> text</p>'."'";
$string=strip_tags($string,"");
$string = preg_replace('/[^A-Za-z0-9\s.\s-]/','',$string); 
echo $string = str_replace( array( '-', '.' ), '', $string);
?>

Ответ 6

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

Ответ 7

mysqli_set_charset($con,"utf8");
$title = ' LEVEL â€" EXTENDED'; 
$newtitle = preg_replace('/[^(\x20-\x7F)]*/','', $title);     
echo $newtitle;

Result :  LEVEL EXTENDED

Многие Странные Символы могут быть удалены путем применения ниже кода подключения mysql. но при некоторых обстоятельствах удаления этого типа странного символа, такого как..., вы можете использовать preg_replace выше формата.

Ответ 8

См. пример.

/**
 * nv_get_plaintext()
 *
 * @param mixed $string
 * @return
 */
function nv_get_plaintext( $string, $keep_image = false, $keep_link = false )
{
    // Get image tags
    if( $keep_image )
    {
        if( preg_match_all( "/\<img[^\>]*src=\"([^\"]*)\"[^\>]*\>/is", $string, $match ) )
        {
            foreach( $match[0] as $key => $_m )
            {
                $textimg = '';
                if( strpos( $match[1][$key], 'data:image/png;base64' ) === false )
                {
                    $textimg = " " . $match[1][$key];
                }
                if( preg_match_all( "/\<img[^\>]*alt=\"([^\"]+)\"[^\>]*\>/is", $_m, $m_alt ) )
                {
                    $textimg .= " " . $m_alt[1][0];
                }
                $string = str_replace( $_m, $textimg, $string );
            }
        }
    }

    // Get link tags
    if( $keep_link )
    {
        if( preg_match_all( "/\<a[^\>]*href=\"([^\"]+)\"[^\>]*\>(.*)\<\/a\>/isU", $string, $match ) )
        {
            foreach( $match[0] as $key => $_m )
            {
                $string = str_replace( $_m, $match[1][$key] . " " . $match[2][$key], $string );
            }
        }
    }

    $string = str_replace( ' ', ' ', strip_tags( $string ) );
    return preg_replace( '/[ ]+/', ' ', $string );
}