Вопрос

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

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

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

Это было полезно?

Решение

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

  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 и определять это во время отображения, а затем изменять только способ отображения данных.Преимущества:вы можете упорядочить результаты по количеству ванных комнат, если значение является числовым, а не строковым, и т.д.Кроме того, вы избегаете ошибок, подобных этой.

Другие советы

Символ, который вы ищете, - это символ Юникода Вульгарная Дробь Одна Половина

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

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

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

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

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

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

if($this->datos->bathrooms == "1".chr(189)){$select1 = JText::_( 'selected="selected"' );}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top