重定向两次到网站

时间:2012-12-31 07:07:37

标签: php css screen-scraping output

我正在网站上建一本字典。我打电话给原始网站(www.rae.es)的术语定义,并改变他们自己的css。这是代码:

<?php
    $word = $_REQUEST['word'];


    $url = "http://lema.rae.es/drae/srv/search?val={$word}";

    $css = <<<EOT

    <style type="text/css">
    @font-face {
                font-family: 'brannboll_fetregular';
                src: url('brannbollfet-webfont.eot');
                src: url('brannbollfet-webfont.eot?#iefix') format('embedded-opentype'),
                    url('brannbollfet-webfont.woff') format('woff'),
                    url('brannbollfet-webfont.ttf') format('truetype'),
                    url('brannbollfet-webfont.svg#brannboll_fetregular') format('svg');

                }

    .a
       {
        color: #ffe200;
        margin-top:20px !important;
       }
    .f
       {
         margin-left:20px !important;
         margin-top:10px;
         font-size: 200%;
         color: #ffe200;
         font-family: 'brannboll_fetregular';

       }
    .o
       {
         font-size: 80%;
         color: #ffe200;
         margin-left:10px;
         font-family: 'Belgrano', serif;
        }
    .q {
        margin-left:10px;
        font-family: 'Belgrano', serif;
        }
    .k {
        margin-left:10px;
        font-family: 'Belgrano', serif;
        }
    .p {

        font-family: 'Belgrano', serif;
        }     
    img
        {
        visibility:hidden;
         }

    </style>
    EOT;

    $data = file_get_contents($url);
    $data = str_replace('<head>', $css.'</head>', $data);
    $data = str_replace('<span class="f"><b>.</b></span>', '', $data);
    echo '<div id="result1"
      style="
      top: 77%;
      left: 55%;
      overflow:scroll; 
      width:400px; 
      height:300px;
      border: 1px solid #000000;
      border-radius: 15px;
      background-opacity: 0.5;
      background: #047C8F;
      -webkit-border-radius: 15px;
      -moz-border-radius: 15px;
      box-shadow: inset 0px 3px 13px #000000;
      -moz-box-shadow:
                   0px 3px 13px rgba(000,000,000,0.5),
                   inset 0px 0px 13px rgba(0,0,0,1);
      -webkit-box-shadow:
                   0px 3px 13px rgba(000,000,000,0.5),
                   inset 0px 0px 13px rgba(0,0,0,1);
     ">
     '.$data.' 
     </div>';
        ?> 

现在,有时候,有些话会提出建议。例如:http://lema.rae.es/drae/?val=casa。如果你搜索“casa”,你会得到3条建议。现在,如果在我的网站中,我点击这些超链接,我将被重定向到错误页面。所以,我现在解决方案是在php的手中,我只是不知道从哪里开始。 谢谢!

2 个答案:

答案 0 :(得分:1)

如果您查看从http://lema.rae.es/drae/?val=casa获得的HTML,您会看到您的建议链接是相对链接:

  

&lt; a href =“search?id = wHzIYMmRVDXX2tX1bpuy”&gt;

在将它们发送给用户之前,您应该将它们更改为绝对链接。你可以这样做:

  

&lt;?php $ data = preg_replace('/(搜索?[\ d \ w] +)/','http://lema.rae.es/drae/srv/\1',$ data)

更好的解决方案是使用DOMParser来解析来自服务器的响应,并使用CSS选择器或xpath来查找链接并重写其href属性。看看DOMCrawler Symfony component

答案 1 :(得分:0)

链接指向服务器上显然不存在的文件。您可以编写处理文件请求的内容(例如,使用mod_rewrite重写或nginx“位置”),也可以扫描返回的HTML代码以获取这些链接,并在将HTML发送给用户之前修复它们。

你确定你在做什么是合法的吗?看起来您正在复制其他网站的内容并将其作为您自己的内容传递出去。除非网站明确允许,否则你绝对应该这样做。