即使搜索参数看起来与主题部分相同,str_replace也无法正常工作

时间:2016-03-31 09:13:03

标签: php magento

我有这么简单的代码:

Signal.dropRepeats <| Time.since Time.millisecond <| yourMailbox.signal

这是输出:

var_dump($currentUrl);
var_dump($baseUrl);
// strip out base url, so we just get slug of page
$currentSlug = str_replace($baseUrl,'',$currentUrl);
var_dump($currentSlug);

string(50) "http://mysite.lcl/books/our-series/boffin-boy.html" string(27) "http://mysite.lcl/" string(50) "http://mysite.lcl/books/our-series/boffin-boy.html" 是页面的完整网址,没有任何查询参数。 $currentUrl只是 - 网站的基本网址。 baseUrl应该是没有后者的前者($currentSlug),但books/our-series/boffin-boy.html似乎没有做任何事情。

str_replace只是我用于本地开发环境的域名结尾。

我希望我能错过一些明显的东西。有什么帮助吗?

编辑:正如下面的答案中所强调的那样,.lcl比应有的更多。这就是我现在试图获得string(27)

的方法
$baseUrl

有人在这里遇到了同样的问题 - https://magento.stackexchange.com/questions/100579/why-doesnt-this-url-comparison-work

即使它是一个Magento函数,仍然应该有一个纯PHP来从我需要的变量中获取字符,不应该在那里吗?

3 个答案:

答案 0 :(得分:1)

如果您查看var_dump() $baseUrl输出,则表示字符串长度为27,但只显示18个字符。字符串中必须有隐藏的字符,这就是为什么函数无法在$currentUrl中找到它。

尝试使用var_dump(addslashes($baseUrl));检查内部的内容并删除隐藏的字符。然后它应该工作。问题仍然存在,变量是如何创建的。我打赌以某种方式添加\0个字节。

如果字符串包含\0字节,则删除它们:

str_replace("\0", "", $baseUrl);

然后你的替换应该可以正常工作。

答案 1 :(得分:0)

为什么第二行包含27个字符?

driver.implicitly_wait(30)

frame = driver.find_elements_by_xpath("//iframe[@title='PayPal - Log In']")

driver.switch_to_frame(frame)

driver.find_element_by_id("email").send_keys('demo')

driver.find_element_by_id("password").send_keys('12345')

driver.findElement(By.id("btnLogin")).click();

此代码适用于我:

string(27) "http://mysite.lcl/"

答案 2 :(得分:0)

你试过preg_replace()吗?

$url='http://mysite.lcl/books/our-series/boffin-boy.html';

var_dump(preg_replace("/(http|https):\/\/((?:[a-z][a-z\.\d\-]+)\.(?:[a-z][a-z\-]+))(?![\w\.])/is", '', $url));

输出:

string(33) "/books/our-series/boffin-boy.html"