Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用preg_replace()截断.com或.net或.org后面的字符串_Php_Regex_Preg Replace - Fatal编程技术网

Php 使用preg_replace()截断.com或.net或.org后面的字符串

Php 使用preg_replace()截断.com或.net或.org后面的字符串,php,regex,preg-replace,Php,Regex,Preg Replace,我需要编写一段代码,查看用户的HTTP_REFERER,如果设置了REFERER,则查看MySQL表中的REFERER是否与我们在数据库中注册的域匹配。下面是一些示例代码: if(isset($_SERVER['HTTP_REFERER'])){ $domain = $_SERVER['HTTP_REFERER']; $con=mysqli_connect("localhost","username","password","database"); $result = mys

我需要编写一段代码,查看用户的HTTP_REFERER,如果设置了REFERER,则查看MySQL表中的REFERER是否与我们在数据库中注册的域匹配。下面是一些示例代码:

if(isset($_SERVER['HTTP_REFERER'])){
   $domain = $_SERVER['HTTP_REFERER'];
   $con=mysqli_connect("localhost","username","password","database");

   $result = mysqli_query($con,"SELECT  `domain`, `affiliate_id`
     FROM  `affiliates`
     WHERE `domain` = '$domain'");

     $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
     Mage::getModel('core/cookie')->set('affiliate-cookie', $row['affiliate_id'], 0);
     mysqli_close($con);

}       
这里我需要的帮助是:$domain=$\u SERVER['HTTP\u REFERER'];我需要$domain包含的只是referer的域,而不是整个referer。因此,它将取代:,理想情况下,将其剥离到somesite.com,尽管如果不可能,我可以接受将其剥离到somesite.com


我对正则表达式一窍不通,但我可以用谷歌搜索。不幸的是,我还没有找到一个在多达三种情况下截断字符串的正则表达式示例。任何帮助都会很好。

您可以使用regex进行操作,但请先尝试


我还建议您阅读一些关于PHP中SQL注入的内容,以及如何避免它们。

您可以使用正则表达式,但请先尝试


我还建议阅读一些关于PHP中SQL注入的内容以及如何避免它们。

甚至比regexp更好,解析URL:。试试看

echo parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);

甚至比regexp更好地解析URL:。试试看

echo parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);

旁注:使用Magento时,您已经有了一个数据库连接和一个可以使用的请求对象

基本原则如下:

$domain = preg_replace('#^https?://.*?\.([a-z0-9\-]+\.[a-z]{2,})/.*$#', '$1', $req->referer);

您的挑战在于TLD,您可能最好使用preg_replace_回调并集成。

侧注:使用Magento时,您已经有了一个数据库连接和一个可以使用的请求对象

基本原则如下:

$domain = preg_replace('#^https?://.*?\.([a-z0-9\-]+\.[a-z]{2,})/.*$#', '$1', $req->referer);

您的挑战在TLD中,您可能最好使用preg\u replace\u回调来解决这个问题,并集成。

您正在寻找http://[anything]/,并且希望它在跟踪之前匹配所有内容/

解决方案:/http:\/\/[^\/]*=\//

[^\/]*是0个或多个不可用的字符/

?=是向前看的,因此不包括尾随斜杠

要将其输入数据库,可以使用Magento的内置函数。更多信息请点击此处:

如果您希望自己动手并安装PHP5,我建议使用PDO

以下是有关其用法的指南:

以下是更深入的指南:

以下是其用法示例:

对于您的项目,您需要从标题获取URL,然后启动数据库连接。 将url插入数据库。关闭连接。PDO不需要环境卫生,因为它使用预先准备好的语句


如果出于任何原因无法使用PDO,请查阅。它还使用准备好的语句。如果您也不能使用它,请使用$sanitized\u string=mysql\u real\u escape\u string$string;要清理url并确保仅在数据库中使用$sanitized_字符串。

您正在查找http://[anything]/,并且希望它与尾部之前的所有内容匹配/

解决方案:/http:\/\/[^\/]*=\//

[^\/]*是0个或多个不可用的字符/

?=是向前看的,因此不包括尾随斜杠

要将其输入数据库,可以使用Magento的内置函数。更多信息请点击此处:

如果您希望自己动手并安装PHP5,我建议使用PDO

以下是有关其用法的指南:

以下是更深入的指南:

以下是其用法示例:

对于您的项目,您需要从标题获取URL,然后启动数据库连接。 将url插入数据库。关闭连接。PDO不需要环境卫生,因为它使用预先准备好的语句


如果出于任何原因无法使用PDO,请查阅。它还使用准备好的语句。如果您也不能使用它,请使用$sanitized\u string=mysql\u real\u escape\u string$string;要清理url并确保只在数据库中使用$sanitized_字符串。

我可能不知道这里的内容,但由于用户无法通过表单直接输入任何内容,我还需要担心PHP注入吗?用户会因为扰乱了他们的推荐人的价值而造成伤害吗?第二,当我在我们的Magento安装中构建它时,如果我真的不想偷懒,我可以通过Mage的核心通道路由它,这样可以防止注入。这是懒惰的方式;黑客不使用浏览器,也不是用户,而是自己制作标题。Referer是一个HTTP头,您可以通过telnet简单地设置到Web服务器。我不确定Magento是否对引用程序进行了清理,因为它对引用程序没有任何用处。有没有办法自己清理引用程序?问题是清理的目的是什么?在您的情况下,它是DB,所以请使用准备好的语句,并像往常一样进行清理。@Seff-您有什么建议吗?这对我来说基本上是一个新领域,所以我不完全确定从哪里开始。我可能不知道这里,但由于用户无法通过表单直接输入任何内容,我还需要担心PHP注入吗?用户会因为扰乱了他们的推荐人的价值而造成伤害吗?第二,当我在建筑的时候
在我们的Magento安装中,如果我真的不想偷懒的话,我可以通过Mage的核心通道进行路由,这样可以防止注入。这是懒惰的方式;黑客不使用浏览器,也不是用户,而是自己制作标题。Referer是一个HTTP头,您可以通过telnet简单地设置到Web服务器。我不确定Magento是否对引用程序进行了清理,因为它对引用程序没有任何用处。有没有办法自己清理引用程序?问题是清理的目的是什么?在您的情况下,它是DB,所以请使用准备好的语句,并像往常一样进行清理。@Seff-您有什么建议吗?这对我来说基本上是一个新领域,所以我不完全确定从哪里开始。+1表示parse_url,但如果你想要这个域,你仍然需要解决TLD问题。+1表示parse_url,但是如果你想要这个域,你仍然需要解决TLD问题。