【问题标题】:Preg Replace on video object code - only works for first instance视频对象代码上的 Preg Replace - 仅适用于第一个实例
【发布时间】:2011-07-05 09:05:43
【问题描述】:

谁能帮我解释一下为什么下面的代码只适用于对象代码中宽度/高度的第一个实例。我需要替换使用 "height: xxx ; width : xxx" 的样式,然后还要替换实际嵌入的 height = "xxx" 和 width = "xxx"

这是 preg 替换:

$vid_object = preg_replace('~((width)\s?[=:]\s?[\'"]?)[0-9]+~i','${1}600',$vid_object);

$vid_object = preg_replace('~((height)\s?[=:]\s?[\'"]?)[0-9]+~i','${1}364',$vid_object); 

这是视频输出:

<object style="height: 364px; width: 600px"><param name="movie" value="http://www.youtube.com/v/UF06-2Q0-G0?version=3"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/UF06-2Q0-G0?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"></object>

我认为这与代码“${1}600”的替换部分有关,或者结果仅限于第一个实例。

非常感谢任何帮助。当正则表达式不是我的专长时,浪费了太多时间。 谢谢 尼古拉斯

【问题讨论】:

    标签: object video embed preg-replace dimensions


    【解决方案1】:

    试试

    $vid_object=preg_replace('/(width[\s:=\'"]+)\d+/i','${1}600',$vid_object);
    $vid_object=preg_replace('/(height[\s:=\'"]+)\d+/i','${1}364',$vid_object);
    

    范围更广。

    当我在你提供的代码上运行它时,我得到了

    <object style="height: 364px; width: 600px"><param name="movie" value="http://www.youtube.com/v/UF06-2Q0-G0?version=3"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/UF06-2Q0-G0?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="600" height="364"></object>
    

    【讨论】:

    • 我希望,但它没有工作。这也适用于第一对高度/宽度,但不适用于第二对。谢谢你试一试。我不认为我的 php 代码有什么奇怪的地方,但也许这是可能的。
    • @nicopablo hmmm .. 使用您在问题中提供的代码对我有用~这可能是编码问题吗?
    • 这很奇怪。我没有我的清理功能,所以我看不出还有什么不同的编码方式。因此,它肯定会为您改变这两个值。样式(“h:w”)和嵌入(“H”、“W”)?
    • 是的 - 他们在 "magic_quotes_gpc On On" 上。这是好事还是坏事?我总是对此感到困惑;)
    • 糟糕!哈哈,它很可能会在嵌入代码中添加斜杠,这会破坏正则表达式匹配!我认为这是罪魁祸首! =) 你可以在正则表达式中添加斜线,或者关闭 Magic Quotes(我推荐后者)
    【解决方案2】:

    正如 Shad 所说,这确实是魔术引号打开的问题。我只是在 $_POST 数据上使用了 stripslahes。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-31
      • 2012-04-06
      • 1970-01-01
      • 2017-08-12
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多