如何在url中传递php包含的位置?

如何在url中传递php包含的位置?,php,Php,我有大量文件,每个文件中都有几个id。例如,file1.php包含许多段落,每个段落都有一个唯一的id。(id=“1”,id=“2”,id=“3”等)。我希望能够创建指向页面的链接(page a.php)并在链接的url中传递其中一个id的位置,以在php包含页面a.php中显示。我要查找的结果是,整个文件(file1.php)显示在页面a.php中,并突出显示url中传递的特定id。这可能吗?或者我需要使用Java脚本和iframe吗 以下是我的结论: The url: http://mydo

我有大量文件,每个文件中都有几个id。例如,file1.php包含许多段落,每个段落都有一个唯一的id。(id=“1”,id=“2”,id=“3”等)。我希望能够创建指向页面的链接(page a.php)并在链接的url中传递其中一个id的位置,以在php包含页面a.php中显示。我要查找的结果是,整个文件(file1.php)显示在页面a.php中,并突出显示url中传递的特定id。这可能吗?或者我需要使用Java脚本和iframe吗

以下是我的结论:

The url: http://mydomain/thispage.php?xul=http://mydomain.com/folder1/folder2/file.php&id=Abc150:176
守则:

Stylesheet .vrsehilite{styling}

<script type="text/javascript">var x = <?php echo json_encode($_GET["id"]); ?>;</script>

<?php

$invdmn = "<h2>Error: Invalid Domain</h2>";
$filnf = "<h2>Error: File Not Found</h2>";
$pthinv = "<h2>Error: The Path is invalid</h2>";
$idinv = "<h2>Error: The ID is invalid</h2>";
$oops = "<br/><h2>Oops! Something went wrong.<br/><br/>Please click the back button or use the menu to go to a new page.</h2>";
$testdomain = substr_compare ($_GET['xul'],"http://mydomain.com",0,20,FALSE); //make sure the domain name is correct

if ($testdomain == 0) {
  $flurl = $_GET['xul'];
} else {
  echo $invdmn . " " . $oops;
}

$flurl_headers = @get_headers ($flurl);

if ($flurl_headers[0] == 'HTTP/1.1 404 Not Found') {
  echo $filnf . " " . $oops;  //Make sure the file exist
} else {
  $surl = str_replace (".com/",".com/s/",$flurl);
} //add some characters to url at point to explode

list($url1, $path) = explode ("/s/",$surl); //explode into array of 2 [0]url to domain [1] path
$testpath = substr_compare ($path,"file1/file2/",0,10,FALSE); //make sure the path is correct

if ($testpath == "0") {
  $aid = preg_match ("/^[A-Z][a-z]{2}(?:[1-9][0-9]?|1[0-4][0-9]|150):(?:[1-9][0-9]?|1[0-6][0-9]|17[0-6])$/", $_GET['id']);
} else {    //make sure the id is valid
   echo $pthinv . " " . $oops;
} 

if ($aid == 1) {
  include($path); 
  echo "<script type='text/javascript'>";
  echo "document.getElementById(x).className = 'vrsehilite';";
  echo "document.getElementById(x).scrollIntoView();";
  echo "window.scrollBy(0,-100);";
  echo "</script>";
} else {
  echo $idinv . " " . $oops;
}

?>
Stylesheet.vrsehilite{styleing}
var x=;

永远不要
包含用户提交的任意文件。相反,您应该只包含预定义的选择集中的
文件。也许是这样的:

PHP 或者,您可以使用正则表达式仅接受某些文件名,在本例中是1个或多个小写字母,后跟0个或多个数字

$m = array ();

if (   preg_match ('#^http://domain.example/folder1/folder2/([a-z]+[0-9]*\\.php)$#', $m)
    && file_exists ($m[1])) {
  include $m[1];
} else {
  /* Page not found */
}
您可能需要检查include的返回值。您可能还希望将文件夹移动到子模式
(…)
,或使用正则表达式作为文件夹名称


如果您只需要突出显示页面中的某个段落,那么应该添加一个指向该段落的
id
的URL
片段
,并添加CSS来设置其样式。例如:

统一资源定位地址
http://domain.example?id=1#p1

HTML

这是目标段落。

CSS
p:target{/*设置目标元素的样式*/}

Stack Overflow不是一个请求代码的地方,它更像是一个展示代码的地方,让人们帮助您解决问题以找到解决方案。所以要回答您的问题,是的,这是可能的。好的,对不起。我对php和这个网站都是新手。我能够在url中传递一个变量并将其回显到页面上,但不确定如何将其回显到我放入url中的phpinclude中,如下所示:我使用“youuse conditional
if
语句将其回显到页面上,这样做类似于
if($\u GET['id']==1){在此处显示这段代码}
等。但您确实必须清理所有用户输入。如果您需要更多帮助,请询问:-)谢谢您的输入。我非常感谢。在这种情况下,文件太多(31175)为设置数组。也许我需要使用一些条件语句来确保根路径来自我的站点?所有文件的路径中都有域和2个文件夹。然后,在将变量输入include语句之前,我可以使用一些代码剥离域。这是一个好计划还是更有效eeded?我确实使用了id来切换类。好的,谢谢,我在问题中更改了代码。我的做法与您的建议稍有不同,但认为它的作用是相同的?它确实使用了相对路径。我是否也应该对照正则表达式检查路径?文件名都是字母,但长度不同。id是ll的格式相同,但长度也不同。3letters1-150:1-176我没有检查文件是否存在,因为我将是编写此页面链接的人,并在编写代码时检查每个链接。错误的链接只会导致空格或错误,对吗?再次查看后,我认为确保文件存在将有助于e一个好主意。这将确保它来自我的网站。我的代码并不能真正做到这一点。有人可以简单地将我的域放在字段中,这并不重要,因为它在包含之前已被剥离。我不确定如何编写这部分代码,但会查找它。再次感谢。在测试域名时,您需要添加一个尾随斜杠,除非你想要
http://mydomain.com.otherdomain.com/...
直接浏览。其余部分似乎过于复杂且容易出错。我的答案大致相同。使用简单的regexp测试url和id,测试文件是否存在,然后将其包括在内。@rolo:顺便说一下,我会使用
预验证
id
g_匹配('/^[a-z]{3}(\d+):(\d+)$/i',$m)
,然后检查每个数字(
$m[1]
$m[2]
)是否在范围内。这在我看来似乎容易多了。
$m = array ();

if (   preg_match ('#^http://domain.example/folder1/folder2/([a-z]+[0-9]*\\.php)$#', $m)
    && file_exists ($m[1])) {
  include $m[1];
} else {
  /* Page not found */
}
<p id=p1>This is the target paragraph.
p:target { /* Style the targeted <p> element */ }