我有这么简单的代码:
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来从我需要的变量中获取字符,不应该在那里吗?
答案 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"