Ответ 1
Ваша точка соответствует всем символам. Выйдите из него (и другие специальные символы), например:
preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $String);
У меня проблемы с удалением специальных символов. Я хочу удалить все специальные символы, кроме "()/.% - &", потому что я устанавливаю эту строку как заголовок.
Я отредактировал код с оригинала (смотрите ниже):
preg_replace('/[^a-zA-Z0-9_ -%][().][\/]/s', '', $String);
Но это не работает для удаления специальных символов, таких как: ",", "," " и другие.
исходный код: (это работает, но он удаляет эти символы: "()/.% - &" )
preg_replace('/[^a-zA-Z0-9_ -]/s', '', $String);
Ваша точка соответствует всем символам. Выйдите из него (и другие специальные символы), например:
preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $String);
preg_replace('#[^\w()/.%\-&]#',"",$string);
Хорошая попытка! Я думаю, вам просто нужно сделать несколько небольших изменений:
[
и ]
) внутри класса символов (которые также обозначаются символами [
и ]
)\
)-
является особенным: если он находится между двумя символами, это означает диапазон, но если он в начале или в конце, это означает буквальный символ -
.Вам нужно что-то вроде этого:
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, если вы хотите прочитать дальше по этой теме.
Вы хотите str replace, потому что по производительности он намного дешевле и по-прежнему подходит вашим потребностям!
$title = str_replace( array( '\'', '"', ',' , ';', '<', '>' ), ' ', $rawtitle);
(Если это не касается безопасности и SQL-инъекции, в этом случае я бы предпочел пойти с ПОЗИТИВНЫМ списком ДОПОЛНИТЕЛЬНЫХ символов... еще лучше, придерживаться проверенных проверенных процедур.)
Btw, так как OP говорил о настройке заголовка: я бы не заменил специальные символы ничем, а пробелом. Сверхплошное пространство - это не проблема, а два слова, склеенные вместе...
<?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);
?>
preg_replace('/[^a-zA-Z0-9_ \-()\/%-&]/s', '', $String);
mysqli_set_charset($con,"utf8");
$title = ' LEVEL â€" EXTENDED';
$newtitle = preg_replace('/[^(\x20-\x7F)]*/','', $title);
echo $newtitle;
Result : LEVEL EXTENDED
Многие Странные Символы могут быть удалены путем применения ниже кода подключения mysql. но при некоторых обстоятельствах удаления этого типа странного символа, такого как..., вы можете использовать preg_replace выше формата.
См. пример.
/**
* 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 );
}