我正在努力在我的网页上设置条件,从而可能发生以下两件事之一;
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语句处理?
感谢任何帮助。谢谢。
答案 0 :(得分:2)
strpos
用于查找字符串中子字符串出现的位置。
要比较字符串,您可以使用:
if(strcmp($message,"youtube.com/watch?v=") == 0)
或者,正如Mark Baker在评论中建议的那样,使用严格的比较:
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";
}
?>