if(strpos("http://www.example.com","http://www.")==0){ // do work}
Я бы ожидал, что это решится как истинное, что и происходит. Но что происходит, когда я делаю
if(strpos("abcdefghijklmnop","http://www.")==0){// do work}
Это также передается на php 5, потому что, насколько я могу выработать, strpos возвращает false, которое переводится как 0.
Это правильное мышление / поведение? Если да, то каков обходной путь для тестирования на то, что подстрока находится в начале другой строки?
Да, это правильное / ожидаемое поведение:
strpos может возвращать 0 когда есть совпадение в начале строки false когда нет совпадения Дело в том, что вы не должны использовать == для сравнения 0 и false ; вы должны использовать === , например:
if(strpos("abcdefghijklmnop","http://www.") === 0) { }
Или :
if(strpos("abcdefghijklmnop","http://www.") === false) { }
Дополнительные сведения см. В разделе Операторы сравнения :
$a == $b будет TRUE если $a равно $b . $a === $b будет TRUE если $a равно $b , и они одного типа . И, цитируя страницу руководства strpos :
Эта функция может возвращать Boolean
FALSE, но может также возвращать небулевое значение, которое оценивается какFALSE, например0или"".
Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации.
Используйте оператор===для проверки возвращаемого значения этой функции.
=== и !== сравнить тип и значение:
if (strpos("abcdefghijklmnop", "http://www.") !== false){// do work}
strpos возвращает int или boolean false. оператор == также оценивает значение 0 в значении false, вы хотите использовать оператор === (три знака равенства), который также проверяет, что сравниваемые типы одинаковы, а не просто видят, могут ли они быть оценены так, чтобы они были одинаковыми.
так
if (strpos($hastack, $needle) === 0) { // the $needle is found at position 0 in the $haystack }
0 – возможное возвращаемое значение из strpos когда оно находит совпадение в самом начале. Если совпадение не найдено, оно возвращает false (boolean). Поэтому вам нужно проверить возвращаемое значение strpos с помощью оператора === который проверяет значение и тип, а не использует == который просто проверяет значение.
Я лично предпочитаю так:
if(!strpos($v,'ttp:'))$v='http://'.$v;
или
if(strpos(' '.$v,'http'))
чтобы избежать « 0 » позиции, тогда всегда делайте это числом более 0 ура