mit einfachen preg_match / preg_replace Regex in PHP Brauchen Sie Hilfe
-
18-09-2019 - |
Frage
Ich versuche, eine einfache Aufgabe zu tun, von Tausenden von Musik-Video einbetten Codes mit einem gemeinsamen mit / Höhe zu verändern.
Zum Beispiel habe ich den folgenden Code:
<object width="480px" height="407px" >
<param name="allowFullScreen" value="true"/>
<param name="wmode" value="transparent"/>
<param name="movie" value="http://mediaservices.myspace.com/services/media/embed.aspx/m=1311720,t=1,mt=video"/>
<embed src="http://mediaservices.myspace.com/services/media/embed.aspx/m=1311720,t=1,mt=video"
width="480" height="407" allowFullScreen="true"
type="application/x-shockwave-flash"
wmode="transparent">
</embed>
</object>
Zeilenumbrüche hinzugefügt nur für Lesbarkeit
Ich brauche die Breite / Höhe Parameter in beiden <object>
und <embed>
Tags zu bearbeiten, man eine ‚px‘ Suffix, und die andere, die nicht überhaupt eine (was völlig zufällig ist, haben einige Codes es in allen Fällen, andere nicht).
Zum einen, ich versuche, die Breite / Höhe des vorhandenen Video, um herauszufinden, .... das Seitenverhältnis zu finden ... und dann mit den neuen Werten (width = „640“ und die Höhe der vorhandenen Werte ersetzen = „xxx“, die auf dem Seitenverhältnis des Videos basiert).
Lösung
Hier ist, wie die Breite zu erhalten und Höhe
preg_match('/width="(\d+)(px)?" height="(\d+)(px)?"/', $text, $matches);
$width = intval($matches[1]);
$height = intval($matches[3]);
Berechnen Sie die neue Höhe wie folgt aus:
$new_width = 640;
$new_height = intval($new_width * $height / $width);
Und ersetzen etwa so:
$text = preg_replace('/width="(\d+)(px)?" height="(\d+)(px)?"/',
'width="' . $new_width . '" height="' . $new_height . '"',
$text);
Andere Tipps
$embed_clean = preg_replace('/width=([^"]"\d+(%|px|)[^"]")/','width="'.$CONFIG.'"',$embed_clean);
Mit SimpleHTMLDOM :
require_once("simplehtmldom.php");
$dom = str_get_html($text);
foreach ($dom->find('object') as $obj) {
$width = intval($obj->width);
$height = intval($obj->height);
$height = intval(640 * $height / $width);
$obj->width = 640;
$obj->height = $height;
$embed = $obj->find('embed',0);
if ($embed != null) {
$embed->width = 640;
$embed->height = $height;
}
}
$text = $dom->save();