Хорошо, эта проблема, кажется, выше моей головы!
У меня есть этот код:
$request=preg_replace('$(^'.str_replace('$','\$',$webRoot).')$i','',$requestUri);
Это бросает мне ошибку:
preg_replace(): Нет закрывающего ограничителя '$' найдено
Но вот в чем дело, что окончание делиметр конечно есть.
После этого вызова функции повторил я из следующих действий:
echo $webRoot;
echo $requestUri;
echo '$(^'.str_replace('$','\$',$webRoot).')$i';
Это результат тех эхо-сигналов:
/
/en/example/
$(^/)$i
Что такое смешное, что если я сделаю это прямо:
preg_replace('$(^/)$i','',$requestUri);
..it работает. Но это также не:
$tmp=str_replace('$','\$',$webRoot);
preg_replace('$(^'.$tmp.')$i','',$requestUri);
И только тщательное, я также испытал, что эхо $ TMP дает, и это дает правильное значение:
/
это ошибка в PHP в ОС Windows ? Я попробовал это на сервере Linux, и он работал, как ожидалось, и не выдавал эту ошибку. Или я чего-то не хватает?
Просто убедитесь, что я даже обновил PHP до последней версии Windows (5.4.2), и то же самое происходит.
Есть ли причина, по которой вы используете метасимвол в качестве разделителя? –
Получаете ли вы ту же ошибку при использовании другого разделителя, например '/' или '#'? – Quantastical
Я изначально использовал/в качестве разделителя (вот почему у меня была str_replace, так как я имел дело с URL-адресом). Знак доллара был тем, что я использовал после попытки проб и ошибок для решения. – kingmaple