Pergunta

Pergunta rápida, como posso fazer isso válido:

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

O ½ não parece ser reconhecido. Tentei escrevê-lo como ½ mas então ele procura ½ literalmente, e não o sinal ½. Alguma idéia?

Foi útil?

Solução

Como muitos outros já observou, você tem um problema de codificação de caracteres, mais provável. Eu não tenho certeza do que codificações PHP suporta, mas você precisa tomar toda a imagem em conta. Para este exemplo, eu estou assumindo que o seu script PHP está respondendo a uma postagem de formulário.

  1. Alguns aplicativos (o seu, mais provável) escreve algum HTML que é codificado utilizando alguns codificação e enviado para o browser. escolhas comuns são ISO-8859-1 e UTF-8. Você deve sempre usar UTF-8, se puder. Nota:. Não é o padrão para a web (infelizmente)
  2. O navegador transferências esta html e processa a página. Os navegadores usam Unicode internamente, na sua maioria, ou algum super. O usuário envia um formulário. Os dados nessa forma é codificado, geralmente com a mesma codificação que a página foi enviado dentro. Então, se você enviar UTF-8 que é enviado de volta para você como UTF-8.
  3. PHP lê os bytes da solicitação de entrada e fixa as suas variáveis ??internas. Isto é onde você pode ter um problema, se ele não está pegando a codificação correta.
  4. Você está fazendo uma comparação de string, que se decompõe a uma comparação byte, mas os bytes que compõem os personagens depende da codificação usada. Como Peter Bailey escreveu ,

    • Em ISO-8859-1 este personagem é codificado como 0xBD
    • Em UTF-8 este personagem é codificado como 0xC2BD

Você precisa verificar a codificação de texto ao longo de cada passo do caminho para se certificar que está acontecendo como você espera. Você pode verificar os dados enviados para o navegador, alterando a codificação do navegador auto-detectada a codificação para algo mais para ver como as mudanças de páginas.

Se os dados não está vindo do navegador, mas sim da DB, você precisa verificar as codificações entre seu aplicativo e o DB.

Finalmente, eu sugiro que é impraticável para utilizar uma string como 1½ como uma chave para a comparação como você é. Eu recomendo usar 1,5 e detectar que pelo tempo de exibição, em seguida, mudando a forma como os dados são exibidos somente. Vantagens:. Você pode encomendar os resultados por número de casas de banho se o valor for numérico, em oposição a uma corda, etc. Além disso, você evitar erros como este

Outras dicas

O personagem que você está procurando é o caráter Unicode Vulgar Fraction One metade

Há uma infinidade de maneiras de se certificar que você está exibindo esse personagem corretamente, todos os quais dependem da codificação dos seus dados. Ao olhar aqui podemos ver que

  • Em ISO-8859-1, uma codificação ocidental popular, este personagem é codificado como BD
  • Em UTF-8, uma codificação internacional popular, este personagem é codificado ad C2BD

O que isto significa é que, se seu arquivo PHP é UTF-8 codificado, mas você está enviando este para o navegador como ISO-8850-1 (ou o contrário), o personagem não vai processar corretamente.

Como outros já publicados, você pode também usar o Entity HTML para esse personagem que será de codificação de caracteres agnóstico e sempre vai render (em HTML) corretamente, independentemente da codificação de saída.

Tente compará-lo com "1½"

Use o PHP chr função para criar o personagem pelo seu hex 0xBD ou dezembro 189:

if($this->datos->bathrooms == "1".chr(189)){$select1 = JText::_( 'selected="selected"' );}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top