小于和大于之间的文本输出PHP


Text between less than and greater than not output PHP

我使用(str_replace)函数将youtube url中的##ID##替换为正则表达式:(?P<id>[a-z-A-Z_0-9]+)所以我使用下面的代码:

<?php
  $urlbase = 'https://www.youtube.com/watch?v=##ID##';
  $lastchange = str_replace('##ID##', '(<id>[a-z-A-Z_0-9]+)', $urlbase);
  echo $lastchange;
?>

我在浏览器中得到这样的输出:https://www.youtube.com/watch?v=(?P[a-z-A-Z_0-9]+),它看起来像<id>不显示!

我试试这个简单的代码:

<?php
 echo "This is my <id>";
?>

但我只是得到this is my在浏览器!

有什么问题吗?以及如何修复它,谢谢

被解释为HTML,所以浏览器正在解析它,因为它不是一个可呈现的元素,所以它什么也不显示。试一试:

<?php
  echo "This is my &lt;id&gt;
?>

至于str_replace,它所做的正是函数应该做的。如果您希望在字符串替换中使用正则表达式,请使用preg_replace

标签<正在被您的浏览器删除。如果您查看源代码,它确实存在。也许你应该试试:>

  $urlbase = 'https://www.youtube.com/watch?v=##ID##';
  $lastchange = str_replace('##ID##', '(<id>[a-z-A-Z_0-9]+)', $urlbase);
  echo urlencode( $lastchange );

问题在于:

$lastchange = str_replace('##ID##', '(<id>[a-z-A-Z_0-9]+)', $urlbase);

str_replace不使用正则表达式

需要preg_replace

$pattern = '(<id>[a-z-A-Z_0-9]+)'
$replacement = '##ID##'
$string = $urlbase
$lastchange = preg_replace($pattern, $replacement, $string);

另外<>是html实体,这意味着它们是html保留字符,它们有一些特殊的含义,如果你想显示它们,那么你必须使用它们的实体名称,例如&lt;&gt;

<?php
   echo " echo "This is my &lt;id&gt;";
?>