Как написать ½ в php - PullRequest
       54

Как написать ½ в php

0 голосов
/ 08 марта 2010

Быстрый вопрос, как я могу сделать это действительным:

if($this->datos->bathrooms == "1½"){$select1 = JText::_( 'selected="selected"' );}

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

Ответы [ 4 ]

4 голосов
/ 08 марта 2010

Как уже отмечали многие, у вас, скорее всего, проблема с кодировкой символов.Я не уверен, какие кодировки поддерживает PHP, но вам нужно принять во внимание всю картину.В этом примере я предполагаю, что ваш PHP-скрипт отвечает на сообщение FORM.

  1. Некоторое приложение (ваше, скорее всего) пишет некоторый HTML-код, который кодируется с использованием некоторой кодировки, и отправляется в браузер.Обычный выбор - ISO-8859-1 и UTF-8.Вы всегда должны использовать UTF-8, если можете.Примечание: это не по умолчанию для Интернета (к сожалению).
  2. Браузер загружает этот HTML и отображает страницу.Браузеры используют Unicode внутри, в основном, или некоторые надмножества.Пользователь отправляет форму.Данные в этой форме кодируются, как правило, в той же кодировке, в которой была отправлена ​​страница. Поэтому, если вы отправляете UTF-8, он возвращается вам как UTF-8.
  3. PHP читает байтывходящий запрос и устанавливает его внутренние переменные.Вот где у вас может возникнуть проблема, если она не выберет правильную кодировку.
  4. Вы делаете сравнение строк, которое разлагается на сравнение байтов, но байты, которые составляют символы, зависятна используемой кодировке. Как писал Питер Бейли ,

    • В ISO-8859-1 этот символ кодируется как 0xBD
    • В UTF-8 этот символ кодируется как 0xC2BD

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

Если ваши данные поступают не из браузера, а изБД, вам нужно проверить кодировки между вашим приложением и БД.

Наконец, я бы предположил, что нецелесообразно использовать строку типа 1½ в качестве ключа для сравнения, как вы.Я бы порекомендовал использовать 1,5 и определить это во время отображения, а затем изменить только способ отображения данных.Преимущества: вы можете упорядочить результаты по количеству ванных комнат, если значение является числовым, а не строкой и т. Д. Кроме того, вы избегаете ошибок, подобных этой.

1 голос
/ 08 марта 2010

Персонаж, которого вы ищете, - это Unicode Vulgar Fraction One Half

Существует множество способов убедиться, что вы правильно отображаете этот символ, и все они зависят от кодировки ваших данных. Посмотрев здесь , мы увидим, что

  • В популярной западной кодировке ISO-8859-1 этот символ кодируется как BD
  • В UTF-8, популярной международной кодировке, этот символ кодируется до C2BD

Это означает, что если ваш файл PHP имеет кодировку UTF-8, но вы отправляете его в браузер как ISO-8850-1 (или наоборот), символ не будет отображаться должным образом.

Как уже сообщали другие, вы также можете использовать HTML-сущность для этого символа, которая будет независимой от кодировки символов и всегда будет правильно отображаться (в HTML), независимо от выходной кодировки.

0 голосов
/ 08 марта 2010

Используйте функцию PHP chr для создания символа по его шестнадцатеричному 0xBD или dec 189:

if($this->datos->bathrooms == "1".chr(189)){$select1 = JText::_( 'selected="selected"' );}
0 голосов
/ 08 марта 2010

Попробуйте сравнить его с "1½"

...