2017-02-22 1 views
0

In meiner Website möchte ich den deutschen Buchstaben ß verwenden, der nur als Kleinbuchstabe existiert. Obwohl ich möchte, dass alle meine Überschriften in Großbuchstaben angezeigt werden (Großschreibung), verwende ich font-transform: uppercase. Aber das ersetzt den ß-Brief durch einen SS-Großbuchstaben, der aufgrund bestimmter Design- und Programmiereigenschaften nicht erwünscht ist.Regex: Überschriften Texte in Großbuchstaben umwandeln

So dachte ich über eine preg_replace_callback nach, die alle Buchstaben in den Überschriften in meinem HTML-Code zu ihren Großbuchstaben ändert.

$content = preg_replace_callback('/(<h\d>)(.*)(<\/h\d>)/', function($matches) { 
    return $matches[1] . mb_strtoupper($matches[2], 'UTF-8') . $matches[3]; 
}, $content); 

, die gut auf Schriften ohne besondere Attribute oder verschachtelten Links funktionieren usw. Als ich ein total Neuling bin in regulären Ausdrücken ich weiß nicht, wie diese zu schreiben.

Grundsätzlich sollte <h2 class="heading-italic"><a href="http://www.google.de">Google</a></h2>-<h2 class="heading-italic"><a href="http://www.google.de">GOOGLE</a></h2>

werden Wie würden Blick meinen regulären Ausdruck, dass mit Attributen wird auch Fangschriften und auch (mehrfach) verschachtelt Elemente?

+0

Ich würde gerne zwei Dinge empfehlen: 1) Bleiben Sie mit dem Doppel-S für Großbuchstaben ß, da dies weitgehend als "korrekt" akzeptiert wird. Es gibt einen Grund, warum CSS so vorgeht. Es ist wie das Mischen von Minus/Minus (-/-), Apostroph/Akzent, [Plenen] (https://en.wikipedia.org/wiki/Plenken) und so weiter: Der Benutzer versteht es, aber es ist falsch. 2) [HTML nicht mit Regex analysieren] (http://stackoverflow.com/a/1732454/3890673) :-) – crusy

Antwort

0

ändern /(<h\d>)(.*)(<\/h\d>)/ auf diesen:

$newregex = '/(<h\d.*?>)(<a .*?>)?(.*)(<\/a>)?(<\/h\d>)/' ; 

$content = preg_replace_callback($newregex , function($matches) { 
    return $matches[1] . mb_strtoupper($matches[3], 'UTF-8') . $matches[5]; 
}, $content); 

Hinweis mb_strtoupper($matches[3], 'UTF-8') und [3] werden für neuen regex und dritte Gruppe verwendet. Gruppe2 und Gruppe4 sind optional.

Verwandte Themen