2016-03-31 11 views
0

の一部と同一に見えるにもかかわらず、私はこのコードの単純なビットを持って働いていません、任意のクエリパラメータなし。 baseUrlはそれだけです - ウェブサイトのベースURLです。 $currentSlugは後者を含まない前者(books/our-series/boffin-boy.html)ですが、str_replaceは何もしていないようです。str_replaceは、検索パラメータは、被験者

.lclは、私は私の地元のdevの環境のために使用していますエンディングだけのドメインです。

私はちょうど何かが明らかでないことを願っています。助けてください?

EDIT:以下の回答で強調したように、string(27)はそれがあるべきより多くのです。これは私が今$baseUrlを取得しようとしています方法です:

$baseUrl = Mage::getUrl(); // this is a core Magento function 
$baseUrl = trim($baseUrl); 
$baseUrl = str_replace("\0", "", $baseUrl); 
$baseUrl = (string) $baseUrl; 

var_dump(addslashes($baseUrl)); 

// outputs the same length, string(27) 

誰かがここに同じ問題を抱えていたと見えます - https://magento.stackexchange.com/questions/100579/why-doesnt-this-url-comparison-work

それはMagentoの機能だにもかかわらず、まだ取得する純粋なPHPがあるはずです私が必要とするその変数の中の文字はありませんか?

+0

はどうなりますか?言って、「mysite」だけ。たぶん、好きではないチャーがありますか? – Andreas

+0

str_replaceはスラグのみを表示しています... – OBAID

答えて

1

が、唯一の18文字を示しています

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

このコードは、私のために動作します。文字列に隠れた文字がなければなりません。なぜ関数がそれを見つけることができないのですか?$currentUrl

内部の内容をvar_dump(addslashes($baseUrl));で確認し、隠し文字を削除してみてください。そうすればうまくいくはずです。変数はどのように作成されているのかという疑問が残っています。私は\0バイトが何らかの形で追加されると確信しています。文字列は、それらが含まれている場合\0バイトを削除するには

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

をしてから交換が正常に動作する必要があります。

+0

それを見つけていただきありがとうございます、私はあなたの提案(私の答えを編集)を試みました。まだ27として長さの出力を持っています。非常に奇妙な! – Sarah

+0

'var_dump(addslashes($ baseUrl));' –

+0

と '$ baseUrl = Mage :: getUrl();'の直後に出力を表示してください。まったく同じ 'string(27)" http://mysite.lcl/ " ' – Sarah

0

2行目に27文字が含まれているのはなぜですか?あなたはそれが文字列な長さが27であると言う$baseUrlvar_dump()出力を見ている場合

<?php 
$currentUrl = 'http://mysite.lcl/books/our-series/boffin-boy.html'; 
$baseUrl = 'http://mysite.lcl/'; 

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); 
+0

あなたはそうです、強調してくれてありがとう、私はそれに気付かなかった。私が同じことをしたら、私は期待される結果を得ている。私は '$ baseUrl'をどのように取得しているのでしょうか、私は' var_dump'が可視文字以上の文字列であると言っているのを理解していません。 – Sarah

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)); 

出力:あなたはsmaler参加し、うち置き換える場合

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

これは別の解決策として機能しますが、 'str_replace'がなぜ機能していないのかの謎を解消するものではありません。 – Sarah

関連する問題