PHP: strpos () не может найти «» - PullRequest
4 голосов
/ 25 октября 2011

Я посмотрел на другой вопрос, но ответ для меня неверен.

$ текст:

(string:104) “The diamond cannot be polished without friction, nor the man perfected without trials.” Chinese Proverb

Пока ...

strpos($text, '“')

=== false при проверке.

То же самое с:

strpos($text, "“")
strpos($text, "\“")
strpos($text, '\“')

Идеи?

РЕДАКТИРОВАТЬ: это переменная $ _POST, извлекаемая из текстовой области, если это делаетразница.Значение точно

“The diamond cannot be polished without friction, nor the man perfected without trials.” Chinese Proverb

Ответы [ 7 ]

3 голосов
/ 25 октября 2011

Возможно, символ кавычки , найденный в тексте, отличается от символа Юникода, который указан в вашем коде. В качестве альтернативы, возможно, текст в кодировке отличается от вашего кода. Проверьте, в каком наборе символов вы просматриваете вывод, и посмотрите, соответствует ли он кодировке сценария PHP.

Edit:

function str_ord ($str) {
    $len = strlen($str);
    $my_array = array();
    for ($i = 0; $i < $len; ++$i) {
        $my_array[] = ord($str[$i]);
    }
    return implode(' ', $my_array);
}

Узнайте, что str_ord() выводит для '“' и для первых нескольких символов вашей текстовой строки. Если он выводит разные числа, значит у вас проблема с кодировкой символов.

2 голосов
/ 25 октября 2011

Вы действительно используете (string:104) как часть вашего $text значения?

Я спрашиваю об этом, потому что я проверял со строкой:

$text = '(string:104) “The diamond cannot be polished without friction, nor the man perfected without trials.”';

, которая возвращает числопервая умная цитата.

Затем я проверил:

$text = '“The diamond cannot be polished without friction, nor the man perfected without trials.”';

Что, очевидно, возвращает 0, что также равно false.Вы уверены, что проверяете возвращаемое значение правильно?

Например:

$text = '“The diamond cannot be polished without friction, nor the man perfected without trials.”';

echo strpos($text, '“') !== false ? 'Yay' : 'Nay';
0 голосов
/ 17 марта 2013

Как указано выше Sour Lemon,

$str='"This text"';
echo strpos($str, '"');

производит 0, что является ложным, поэтому нужно явно сравнивать с ложным, то есть

if(strpos($str, '"')!==false)
   echo "Found it.";
else
 echo "Dangit, not again! Why wont this thing work?";`

производит "Найдено это".

0 голосов
/ 25 октября 2011

Страница, содержащая вашу форму, вероятно, обслуживается с другой кодировкой, чем ожидает ваш PHP-скрипт. Они должны соответствовать друг другу.

Попробуйте добавить эту строку в начало страницы php, которая обслуживает форму и страницы php, которая получает сообщение формы:

header('Content-Type: text/html; charset=utf-8');
0 голосов
/ 25 октября 2011

Я не знаю, что не так с вашим PHP. Мой тест ниже получил результат:

<?php

$text = "   “The diamond cannot be polished without friction, nor the man perfected without trials.” Chinese Proverb";

echo strpos($text, '“');

производит:

3
0 голосов
/ 25 октября 2011
<?php
$text = '(string:104) "The diamond cannot be polished without friction, nor the man perfected without trials." Chinese Proverb';
echo strpos($text, '"');
?>

13

Я не уверен, что у вас проблемы с этим. кажется, что он работает нормально локально, возможно, вы определили строку без указанного символа?

0 голосов
/ 25 октября 2011

попробуйте это:

strpos($text, """");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...