1

我正在努力在我的网页上设置一个条件,以便可能发生 2 件事中的 1 件;

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 语句处理?

任何帮助表示赞赏。谢谢你。

4

3 回答 3

2

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

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

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

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

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

TRUE只有当$message等于和相同类型(字符串)时,它才会评估。

于 2013-09-25T20:01:34.553 回答
1

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

1) 它的超链接长度,包括“ https://www.youtube.com/watch?w= ”往往是 43 到 44 个字符长。然而,这并不是太独特。例如,PHP.net 自己的超链接可以这么长,我们不想使用嵌入这些链接。

2) 另一个使 youtube 超链接因明显原因而独一无二的因素是上述“ https://www.youtube.com/watch?v= ”模式。

使用这两个特征,我们可以创建 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 语句的第一部分将不起作用,链接将变成可点击的链接。但是,这将是一件非常容易解决的事情。到目前为止,这段代码解决了这个问题。

于 2013-09-26T03:42:47.493 回答
0

编辑:试试这个

<?php
$t="youtube.com/watch?v=";
if ($t == "youtube.com/watch?v=")
  {
  echo "match";
  }
?>
于 2013-09-25T20:04:50.653 回答