PHP entfernt Sonderzeichen aus der Zeichenfolge

Ich habe Probleme beim Entfernen von Sonderzeichen. Ich möchte alle Sonderzeichen außer “() /.% – &” entfernen, da ich diese Zeichenfolge als Titel festlege.

Ich habe Code aus dem Original bearbeitet (siehe unten):

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

Aber das funktioniert nicht, um Sonderzeichen wie “…”, “…” und andere zu entfernen.

Originalcode: (das funktioniert, aber es entfernt diese Zeichen: “() /.% – &”)

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

Dein Punkt stimmt mit allen Zeichen überein. Entkomme es (und die anderen Sonderzeichen), so:

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

Guter Versuch! Ich denke, du musst nur ein paar kleine Änderungen vornehmen:

  • Entkomme den eckigen Klammern ( [ und ] ) innerhalb der Zeichenklasse (die auch durch [ und ] angezeigt werden)
  • Lege das Escape-Zeichen ( \ ) selbst zurück
  • Außerdem gibt es eine Besonderheit, wo - ist besonders: wenn es zwischen zwei Zeichen ist, bedeutet es eine Reichweite, aber wenn es am Anfang oder am Ende ist, bedeutet es den Literal - Charakter.

Du wirst so etwas wollen:

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

Weitere Informationen zu diesem Thema finden Sie unter http://docs.activestate.com/activeperl/5.10/lib/pods/perlrecharclass.html#special_characters_inside_a_bracketed_character_class .

Sie möchten str ersetzen , denn leistungsmäßig ist es viel günstiger und passt immer noch Ihren Bedürfnissen!

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

(Wenn es nicht nur um Sicherheit und SQL-Injection geht, würde ich in diesem Fall lieber eine POSITIVE Liste ALLOWED-Zeichen verwenden … noch besser, bleibe bei den getesteten, bewährten Routinen.)

Übrigens, da das OP über Titelsetzung gesprochen hat: Ich würde spezielle Zeichen nicht durch nichts ersetzen, sondern durch ein Leerzeichen. Ein oberflächlicher Raum ist weniger ein Problem als zwei zusammengeklebte Wörter …

 < ?php $string = '`~!@#$%^&^&*()_+{}[]|\/;:"< >,.?-

You .

text

'."'"; $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); 

Siehe Beispiel .

 /** * 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( "/\]*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( "/\]*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( "/\]*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 ); }