2009-03-18 20 views
46

Ich erstelle eine RSS-Feed-Datei für meine Anwendung, in der ich HTML-Tags entfernen möchte, was von strip_tags getan wird. Aber strip_tags ist das Entfernen nicht HTML speziellen Code Zeichen:Wie html spezielle Zeichen entfernen?

  & © 

usw.

Bitte sagen Sie mir, jede Funktion, die ich verwenden kann, um diese speziellen Code Zeichen aus meiner Zeichenfolge zu entfernen.

Antwort

97

Entweder sie html_entity_decode sie mit entschlüsseln oder entfernen preg_replace mit:

$Content = preg_replace("/&#?[a-z0-9]+;/i","",$Content); 

(Von here)

EDIT: Alternative nach Jacco Kommentar

könnte nett sein, das "+" durch {2,8} oder etwas zu ersetzen. Dies begrenzt die Möglichkeit, ganze Sätze zu ersetzen, wenn ein unverschlüsseltes "&" vorhanden ist.

$Content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$Content); 
+3

könnte schön sein, das '+' mit '{2,8) oder etwas zu ersetzen. Dies wird die Wahrscheinlichkeit des Ersetzens ganzer Sätze begrenzen, wenn ein uncodiertes "&" vorhanden ist. – Jacco

+0

Danke, fügte deinen Kommentar und eine alternative Version zu der Antwort hinzu. – schnaader

+0

Ich habe einen Tippfehler gemacht: Es sollte {2,8} sein, tut mir leid, – Jacco

18

Verwenden Sie html_entity_decode, um HTML-Elemente zu konvertieren.

Sie müssen charset setzen, damit es richtig funktioniert.

+1

dies ist richtig, denn wenn wir nur   mit leeren String ersetzen wir falsches Ergebnis erhalten - alle unzerbrechlich Räume – heximal

7

Sie wollen einen Blick auf htmlentities in Anspruch nehmen() und html_entity_decode() here

$orig = "I'll \"walk\" the <b>dog</b> now"; 

$a = htmlentities($orig); 

$b = html_entity_decode($a); 

echo $a; // I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now 

echo $b; // I'll "walk" the <b>dog</b> now 
+0

kollabierte I sind solche html speziellen Code Zeichen – Prashant

+0

dieses html_entity_decode ($ a) entfernt werden soll; macht das Tric – 0xFF

1

Ein Weg Plain-Vanilla-Strings, es zu tun, ohne die Preg Regex-Engine Eingriff:

function remEntities($str) { 
    if(substr_count($str, '&') && substr_count($str, ';')) { 
    // Find amper 
    $amp_pos = strpos($str, '&'); 
    //Find the ; 
    $semi_pos = strpos($str, ';'); 
    // Only if the ; is after the & 
    if($semi_pos > $amp_pos) { 
     //is a HTML entity, try to remove 
     $tmp = substr($str, 0, $amp_pos); 
     $tmp = $tmp. substr($str, $semi_pos + 1, strlen($str)); 
     $str = $tmp; 
     //Has another entity in it? 
     if(substr_count($str, '&') && substr_count($str, ';')) 
     $str = remEntities($tmp); 
    } 
    } 
    return $str; 
} 
1

Es sieht aus wie, was Sie wirklich wollen, ist: die

function xmlEntities($string) { 
    $translationTable = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES); 

    foreach ($translationTable as $char => $entity) { 
     $from[] = $entity; 
     $to[] = '&#'.ord($char).';'; 
    } 
    return str_replace($from, $to, $string); 
} 

Es ersetzt named-entities mit ihrem Zahlenäquivalent.

1
<?php 
function strip_only($str, $tags, $stripContent = false) { 
    $content = ''; 
    if(!is_array($tags)) { 
     $tags = (strpos($str, '>') !== false 
       ? explode('>', str_replace('<', '', $tags)) 
       : array($tags)); 
     if(end($tags) == '') array_pop($tags); 
    } 
    foreach($tags as $tag) { 
     if ($stripContent) 
      $content = '(.+</'.$tag.'[^>]*>|)'; 
     $str = preg_replace('#</?'.$tag.'[^>]*>'.$content.'#is', '', $str); 
    } 
    return $str; 
} 

$str = '<font color="red">red</font> text'; 
$tags = 'font'; 
$a = strip_only($str, $tags); // red text 
$b = strip_only($str, $tags, true); // text 
?> 
1

Die Funktion, die ich für die Aufgabe eingesetzt, die durch schnaader gemacht Upgrade Beitritt ist:

mysql_real_escape_string(
     preg_replace_callback("/&#?[a-z0-9]+;/i", function($m) { 
      return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); 
     }, strip_tags($row['cuerpo']))) 

Diese Funktion entfernt in jedes HTML-Tag-und HTML-Symbol, umgewandelt in UTF-8 bereit zu sparen MySQL

+0

Erstellen eines RSS-Feeds, nicht auf SQL speichern –

16

Zusätzlich zu den oben genannten guten Antworten hat PHP auch eine eingebaute Filterfunktion, die sehr nützlich ist: filter-var.

HMTL Zeichen zu entfernen, verwenden:

$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);

Weitere Informationen:

  1. function.filter-var
  2. filter_sanitize_string
+2

w3schools ist kein gutes Beispiel Website, siehe http://www.w3fools.com – Skuld

+1

Ich weiß, der Thread ist ein wenig alt, aber ich bin auf der Suche nach dem gleichen Problem .. Leider benötigt filter_var 5.2 oder neuer ... Ansonsten wäre das die Antwort (zumindest für mein spezifisches Problem). Vielen Dank. – ChronoFish

4

Dies kann gut funktionieren, um Sonderzeichen zu entfernen.

$modifiedString = preg_replace("/[^a-zA-Z0-9_.-\s]/", "", $content); 
2

Was ich war getan zu verwenden: html_entity_decode, dann strip_tags, um sie zu entfernen.

2

versuchen, diese

<?php 
$str = "\x8F!!!"; 

// Outputs an empty string 
echo htmlentities($str, ENT_QUOTES, "UTF-8"); 

// Outputs "!!!" 
echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8"); 
?> 
+3

machen Sie einige Notizen "warum Ihr Code funktioniert"?So wäre es für andere klar. – Praveen

-1
$string = "äáčé"; 

$convert = Array(
     'ä'=>'a', 
     'Ä'=>'A', 
     'á'=>'a', 
     'Á'=>'A', 
     'à'=>'a', 
     'À'=>'A', 
     'ã'=>'a', 
     'Ã'=>'A', 
     'â'=>'a', 
     'Â'=>'A', 
     'č'=>'c', 
     'Č'=>'C', 
     'ć'=>'c', 
     'Ć'=>'C', 
     'ď'=>'d', 
     'Ď'=>'D', 
     'ě'=>'e', 
     'Ě'=>'E', 
     'é'=>'e', 
     'É'=>'E', 
     'ë'=>'e', 
    ); 

$string = strtr($string , $convert); 

echo $string; //aace 
+0

Das beantwortet nicht die OPs Ausgabe – FluffyKitten

0

Wenn Sie wollen die HTML-Sonderzeichen konvertieren und nicht nur entfernen Sie diese sowie Streifen Dinge nach unten und die Vorbereitungen für Klartext dies die Lösung war die für mich gearbeitet ...

function htmlToPlainText($str){ 
    $str = html_entity_decode($str, ENT_QUOTES | ENT_XML1, 'UTF-8'); 
    $str = htmlspecialchars_decode($str); 
    $str = html_entity_decode($str); 
    $str = strip_tags($str); 
    return $str; 
} 

$string = '<p>this is (&nbsp;) a test</p> 
<div>Yes this is! &amp; does it get "processed"? </div>' 

htmlToPlainText($string); 
// "this is () a test. Yes this is! & does it get processed?"` 

html_entity_decode w/ENT_QUOTES | ENT_XML1 konvertiert Dinge wie htmlspecialchars_decode konvertiert Dinge wie html_entity_decode konvertiert &nbsp; und strip_tags entfernt alle HTML-Tags übrig.

Verwandte Themen