2011-06-19 6 views
2

Почему это не удаляет http: // строки?php удаление части строки

$rurl = 'http://www.google.com'; 
$httpposi = strpos($rurl,'://'); 
echo $httpposi; 
if($httpposi === true) { 
$url=substr($rurl, strpos($rurl, '://') + 3); 
echo $url; 
} else { 
$url=$rurl; 
echo '3'.$url.'2'; 
} 

echo $url; 

ответ

3

Вместо:

if($httpposi === true) { 

вам нужно:

if($httpposi !== false) { 

, так как если она является найдено в строке, он возвращает смещение как целое, и вы делая строгое сравнение и строго отличное от нуля положительное целое число не равно логическому значению true.

8 == true // true 
8 === true // false, because 8 is not a boolean 
0 == true // false, but we need to know if the needle is at position 0 

так:

0 !== false // true, string was found 
8 !== false // true, string was found 
false !== false // false, string was not found 

Если последовательность находится в начале строки, то falsy 0 будут возвращены, поэтому необходимо строго сравнить false знать, что это не было вообще.

+0

Привет, Карим, если вещь, которую я искал, была в положении 0, будет ли ваш метод работать? – David19801

+0

@ David19801 - да, я немного обновил объяснение. Попробуем прояснить еще кое-что. – karim79

0

Изменение if($httpposi === true) { к if($httpposi) { или if($httpposi == true) {, поскольку $httpposi = 4 не === к true.

+0

К сожалению. Я полностью забыл о '! == false' ... – JiminP

1

Как уже было опубликовано несколько человек: Не сравнивайте $httpposi с булевым значением! Возвращаемое значение функции strpos является целочисленным значением, если оно обнаружило возникновение, но может возвращать либо false, 0, либо "", если он не нашел вашу переданную строку.

Для получения дополнительной информации взгляните на PHP.net docs!

1

Или вы могли бы использовать preg_replace вместо и избавиться от этой проблемы иначе:

$url=preg_replace('~^https?://~i','','http://www.google.com') 

Обслуживает по протоколу HTTPS, а также. Просто удалите [s]? если это не то, что вы хотите. /i для игнорирования случая.

+0

Спасибо, косые черты были плохим выбором, конечно .. :-) Кронштейны вокруг я бы сохранил себя для удобочитаемости .. – Bing

Смежные вопросы