2013-02-13 3 views
0

Я пытаюсь поймать точки пули, которые были указаны в текстовом поле, и попытаться заменить ее чем-то другим, потому что она отображается как ? вместо • после рендеринга данного текста пользователю. Я протестировал вот так: я написал текст с маркерами в слове и скопировал в текстовое поле.Простая проблема с пулевой точкой

Мое видение заключается в следующем:

$test = strstr($input,'•'); 
if($test){ echo "bullet point found!"; 
} 

, но он не работает или не ловить, или • является неправильным регулярным выражением, чтобы поймать пункты пули.

+3

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

+0

Я обслуживаю страницу с помощью utf-8 – doniyor

ответ

1

strstr вряд ли поймает , когда вы укажете •, поскольку первый является родным символом, а последний - объектом HTML.

Не имеет значения, однако: вы должны исправить основной вопрос.

У вас может возникнуть проблема с кодировкой, которая не ограничивается маркерами. Просмотр символа означает, что вы подаете символ не UTF-8 в выход UTF-8.

Причины для этого могут быть:

  • Исходный файл (где хранится символ), который сохраняется в неверной кодировке, например, Windows-1252 вместо UTF-8 (флажок «Сохранить как ...» диалог вашего IDE)

  • подключение к базе данных, которая использует latin1 как кодирование подключения (даже если таблицы UTF-8)

См. UTF-8 all the way through для получения полного списка вещей.

+0

спасибо, человек. я попробую это – doniyor

0

Попробуйте • вместо •.

См Special Characters in HTML.

Вполне вероятно, что HTML не проходит & быка, но HTML equivilent.

Если это не поможет найти его, просмотрите HTMLEntities(), что может реально быть лучшим способом (если, возможно, вы ТОЛЬКО хотите иметь дело с пулями).

EDIT: Декодирование HTML с html_entity_decode(), перекодировать пользователю с HTMLEntities().

+0

Зачем использовать объекты HTML вообще? –

+0

Потому что никогда не упоминалось о том, что он пытается сделать; это мое понимание (что может быть неправильно), что PHP не обязательно использует те же специальные коды символов, что и HTML, то есть поиск PHP-кодов в тексте HTML может не работать. Эти функции помогают преобразовать, так что строки PHP можно манипулировать. Кодировка ко всем UTF-8 может не всегда быть опцией. – StuckAtWork

0

Прежде всего, прежде чем проверять ввод, обязательно закодируйте все символы в его эквиваленты HTML (которые • есть). Так как это:

$test = strstr(htmlentities($input), '•'); 

if($test) { 
    echo "bullet point found!"; 
} 

Однако, если вы закодировать свой вход с помощью htmlentities всех UTF-8 символы должны быть оказаны штрафом пользователя после этого, как хранилищу не нужно будет иметь дело с UTF-8 больше, тем самым устраняя артефакты.

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

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