使用if语句执行完全匹配

时间:2013-09-25 19:58:06

标签: php

我正在努力在我的网页上设置条件,从而可能发生以下两件事之一;

1)用户自行发布youtube链接,没有其他文字,并且该链接在页面上变成了嵌入式视频。

2)任何其他类型的帖子都会作为常规消息发布,在前面的条件中跳过所有内容。

我有一些语法设置,可以很好地发布嵌入视频(第一个条件),发布文本并创建可点击的超链接(第二个条件),但如果有人试图发布youtube链接以及任何其他文本,则会失败。它失败是因为控制条件1的代码不够具体。这两个条件都是这样处理的;

if(strpos($message,"youtube.com/watch?v="))
    {
    $message = '<iframe width="420" height="315" src="' . str_replace('/watch?v=','/embed/',$message) . '"></iframe>';
    mysqli_query($db_conn,"insert into feed_messages (userid, subject, message) values ('$useridvalue', '$subject', '$message');") 
    or die("".mysql_error());

    $messageid = mysqli_query($db_conn,"select last_insert_id();") or die("".mysql_error());
    $messageidvaluearray = mysqli_fetch_assoc($messageid);
    $messageidvalue = implode(" " , $messageidvaluearray);


    mysqli_query($db_conn,"insert into feed_recipients (messageid, userid) values ('$messageidvalue', '$useridvalue');") 
or die("".mysql_error());
    foreach($_SESSION['recipientlist'] as $recipient) 
    mysqli_query($db_conn,"insert into feed_recipients (messageid, userid) values ('$messageidvalue', '$recipient');");

    header('Refresh: 0; URL=mypage.php');
    }
else
    {
    function make_links_clickable($message)
    {
        return preg_replace('!(((f|ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="$1" target="_blank" STYLE="TEXT-DECORATION: NONE"><b>$1</b></a>', 
$message);
    }

    $message = make_links_clickable($message);

我的问题是;我怎样才能使第一个if语句更严格,这样如果它只看到字符串“youtube.com/watch?v=”,那么它就会执行它的代码块,否则如果它看到其他任何附带的话,那么它可以是由else语句处理?

感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:2)

strpos用于查找字符串中子字符串出现的位置。

要比较字符串,您可以使用:

if(strcmp($message,"youtube.com/watch?v=") == 0)

或者,正如Mark Ba​​ker在评论中建议的那样,使用严格的比较:

if($message === "youtube.com/watch?v=")

仅当TRUE等于且属于同一类型(字符串)时,它才会评估为$message

答案 1 :(得分:1)

好的,所以我想出了如何解决这个问题。值得庆幸的是,youtube的链接长度和URL的模式非常一致。

1)其超链接长度,包括&#34; https://www.youtube.com/watch?w=&#34;往往大约43到44个字符。但是,这不是太独特。例如,PHP.net自己的超链接可能很长,我们不想使用嵌入这些链接。

2)另一个使得youtube超链接由于显而易见的原因而独特的因素是前面提到的&#34; https://www.youtube.com/watch?v=&#34;图案。

使用这两个特性,我们可以创建strlen和strpos语句,这些语句将查找仅作为消息中的youtube链接发布的任何内容。该代码会将该消息链接中的视频转换为嵌入视频。如果海报在邮件中放入了其他内容,它将成为一个超链接。这是代码;

$message = mysqli_real_escape_string($db_conn, $_POST['message']);
$youtubecheck = strlen($message);

if (($youtubecheck == '43') || ($youtubecheck == '44') && strpos($message, "youtube.com/watch?v="))
    {
    $message = '<iframe width="535" height="400" src="' . str_replace('/watch?v=','/embed/',$message) . '"></iframe>';
    }
else
    {
    function make_links_clickable($message)
    {
    return preg_replace('!(((f|ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="$1" target="_blank" STYLE="TEXT-DECORATION: NONE"><b>$1</b></a>', 
$message);
    }
    $message = make_links_clickable($message);

显然,如果超链接的长度从43和44字符长度变化,则if语句的第一部分将不起作用,链接将变为可单击的链接。但是,这将是一个非常容易解决的问题。到目前为止,此代码解决了这个问题。

答案 2 :(得分:0)

编辑:试试这个

<?php
$t="youtube.com/watch?v=";
if ($t == "youtube.com/watch?v=")
  {
  echo "match";
  }
?>