Frage

Kurze Frage, wie kann ich diese gültig:

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

Die ½ scheint nicht erkannt zu werden. Ich versuchte, es als ½ zu schreiben, aber dann sieht es für ½ wahrsten Sinne des Wortes, und nicht das ½ Zeichen. Irgendwelche Ideen?

War es hilfreich?

Lösung

Wie viele andere hier schon berichtet haben, haben Sie eine Zeichencodierung Problem, am wahrscheinlichsten. Ich bin mir nicht sicher, was PHP unterstützt Kodierungen, aber Sie müssen das ganze Bild berücksichtigen. Für dieses Beispiel nehme an, dass ich Ihr PHP-Skript zu einem Formular Post reagiert.

  1. Einige App (Ihre eigenen, höchstwahrscheinlich) schreibt einige HTML, das codiert wird, mit an den Browser eine Codierung und gesendet. Gemeinsame Entscheidungen sind ISO-8859-1 und UTF-8. Sie sollten immer UTF-8 verwenden, wenn Sie können. . Hinweis: es ist nicht der Standard für das Web (leider)
  2. Der Browser lädt diese HTML und macht die Seite. Browser verwendet intern Unicode, meistens, oder etwas Obermenge. Der Benutzer legt ein Formular. Die Daten in dieser Form codiert sind, in der Regel mit der gleichen Codierung, die die Seite in gesendet wurde. Also, wenn Sie UTF-8 senden es zurück zu Ihnen als UTF-8 gesendet wird.
  3. PHP liest den Bytes der eingehenden Anforderung und setzt seine internen Variablen auf. Dies ist, wo Sie vielleicht ein Problem haben, wenn es nicht die richtige Codierung Kommissionierung.
  4. Sie machen einen String-Vergleich, was zu einem Byte-Vergleich zerlegt, aber der Bytes, die die Zeichen bilden, hängt von der Codierung verwendet. Wie Peter Bailey schrieb ,

    • In ISO-8859-1 wird dieses Zeichen als 0xBD codiert
    • In UTF-8 dieses Zeichen ist codiert als 0xC2BD

Sie müssen die Textkodierung entlang jedem Schritt des Weges, um zu überprüfen, um sicherzustellen, dass es geschieht, wie Sie es erwarten. Sie können die Daten überprüfen, indem die Codierung vom Browser des automatisch erkannte Codierung, um etwas anderes zu sehen, wie die Seite Änderungen an den Browser gesendet.

Wenn Ihre Daten nicht aus dem Browser heraus kommen, sondern aus der DB, müssen Sie die Codierungen zwischen Ihrer Anwendung und dem DB überprüfen.

Schließlich würde ich vorschlagen, dass es unpraktisch ist eine Zeichenfolge wie 1½ als Schlüssel zum Vergleich zu verwenden, wie Sie sind. Ich würde empfehlen, 1.5 verwenden und dass bei Anzeigezeit zu erfassen, dann ändern, wie die Daten nur angezeigt wird. Vorteile:. Sie können die Ergebnisse nach der Anzahl der Bäder bestellen, wenn der Wert numerisch ist, als in einen String im Gegensatz usw. Und Sie Fehler wie diese vermeiden

Andere Tipps

Das Zeichen Sie suchen, ist die Unicode-Zeichen gemeiner Bruch One Die Hälfte

Es gibt eine Vielzahl von Möglichkeiten, um sicherzustellen, dass Sie dieses Zeichen richtig angezeigt wird, die alle auf die Codierung der Daten abhängen. Mit Blick hier wir können sehen, dass

  • Im ISO-8859-1, eine beliebten westlicher Codierung, dieses Zeichen als BD codiert ist
  • In UTF-8, einem beliebten internationalen Codierung, dieses Zeichen codiert Anzeige C2BD

Das bedeutet, dass, wenn Ihre PHP-Datei UTF-8 ist codiert, aber Sie dies als ISO-8850-1 an den Browser senden (oder umgekehrt), wird das Zeichen nicht richtig machen.

Wie schon andere geschrieben haben, können Sie auch für dieses Zeichen den HTML-Entity verwenden, die Zeichencodierungs seines Agnostiker und wird immer machen (in HTML) richtig, unabhängig von der Ausgabecodierung.

Versuchen Sie es mit "1½" Vergleich

Mit der PHP chr Funktion den Charakter durch seine hex erstellen 0xBD oder Dezember 189:

if($this->datos->bathrooms == "1".chr(189)){$select1 = JText::_( 'selected="selected"' );}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top