Frage

Ich habe einen Abschnitt von Code auf einem b2evo PHP-Website bekam, die die folgenden:

$content = preg_replace_callback(
    '/[\x80-\xff]/',
    create_function( '$j', 'return "&#".ord($j[0]).";";' ),
    $content);

Was bedeutet dieser Code-Abschnitt tun? Meine Vermutung ist, dass es Streifen aus ASCII-Zeichen zwischen 128 und 256, aber ich kann nicht sicher sein.

Auch, wie es aussieht, wird jedes Mal, dieses Stück Code aus einer Seite, PHP zuordnet genannt und hat dann bis zu 2 KB Speicher nicht frei. Wenn die Funktion 1000+ mal auf einer Seite aufgerufen wird (dies kann passieren), dann verwendet der Seite ein zusätzliches 2 MB Speicher.

Dies verursacht Probleme mit meiner Web-Anwendung. Warum bin ich Gedächtnis zu verlieren, und wie kann ich umschreiben dies, damit ich nicht ein Speicherleck bekommen?

War es hilfreich?

Lösung

Nicht wirklich Strippen, ersetzt High-Ascii-Zeichen in ihren Einheiten.

Siehe preg_replace_callback .
create_function wird verwendet, um eine anonyme Funktion zu machen, aber Sie können eine einfache Funktion statt:

$content = 'Çà ! Nœm dé fîçhïèr tôrdù, @ pöür têstër... ? ~ Œ[€]';
$content = preg_replace_callback('/[\x80-\xff]/', 'CB_CharToEntity', $content);
echo $econtent . '<br>';
echo htmlspecialchars($content) . '<br>';
echo htmlentities($content) . '<br>';
echo htmlentities($content, ENT_NOQUOTES, 'cp1252') . '<br>';

function CB_CharToEntity($matches)
{
    return '&#' . ord($matches[0]) . ';';
}

[EDIT] Gefunden eine sauberere, wahrscheinlich schneller Weg, um den Job zu erledigen! ^ _ ^ Verwenden Sie einfach htmlentities mit Optionen Ihren Bedürfnissen passt.

Andere Tipps

Es ist create_function, dass Ihr Gedächtnis ist undicht -. Nur eine normale Funktion stattdessen verwenden und Sie werden fein

Die Funktion selbst wird die Zeichen mit numerischen HTML-Entitäten zu ersetzen (&#xxx;)

Es ist viel einfacher preg_replace mit der /e Flagge in Ihrem Fall zu verwenden:

$content = preg_replace(
    '/[\x80-\xff]/e',
    '"&#".ord($0).";"',
    $content);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top