如何在PHP中写½

时间:2010-03-08 17:58:00

标签: php joomla special-characters

快速提问,我该怎么做才有效:

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

似乎无法识别½。我尝试将其写为½,但它会逐字地查找½,而不是½符号。有什么想法吗?

4 个答案:

答案 0 :(得分:4)

正如其他许多人所说,你很可能会遇到字符编码问题。我不确定PHP支持哪些编码,但您需要考虑整个图片。对于此示例,我假设您的PHP脚本正在响应FORM帖子。

  1. 某些应用程序(您的,最有可能)会编写一些使用某种编码进行编码并发送到浏览器的HTML。常见的选择是ISO-8859-1和UTF-8。如果可以的话,你应该总是使用UTF-8。注意:它不是网络的默认设置(遗憾的是)。
  2. 浏览器下载此html并呈现页面。浏览器主要在内部使用Unicode,或者使用某些超集。用户提交表单。该表单中的数据经过编码,通常使用与发送页面相同的编码。因此,如果您发送UTF-8,它将以UTF-8的形式发送给您。
  3. PHP读取传入请求的字节并设置其内部变量。如果没有选择正确的编码,这可能是您遇到问题的地方。
  4. 您正在进行字符串比较,它会分解为字节比较,但组成字符的字节取决于使用的编码。 As Peter Bailey wrote

    • 在ISO-8859-1中,此字符编码为0xBD
    • 在UTF-8中,此字符编码为0xC2BD
  5. 您需要在每个步骤中验证文本编码,以确保它按预期发生。您可以通过将浏览器自动检测到的编码中的编码更改为其他内容来验证发送到浏览器的数据,以查看页面的更改方式。

    如果您的数据不是来自浏览器,而是来自数据库,则需要检查应用和数据库之间的编码。

    最后,我建议使用像1½这样的字符串作为比较关键字是不切实际的。我建议使用1.5并在显示时检测,然后改变数据的显示方式。优点:如果值是数字而不是字符串等,您可以按浴室数量订购结果。另外,您可以避免像这样的错误。

答案 1 :(得分:1)

您要查找的字符是Unicode字符Vulgar Fraction One Half

有多种方法可以确保正确显示此字符,所有这些方法都取决于数据的编码。通过查看here,我们可以看到

  • 在ISO-8859-1(一种流行的西方编码)中,此字符编码为BD
  • 在UTF-8(一种流行的国际编码)中,此字符编码为广告C2BD

这意味着如果您的PHP文件是UTF-8编码的,但是您将其作为ISO-8850-1(或其他方式)发送到浏览器,则该字符将无法正确呈现。

正如其他人发布的那样,您也可以将HTML实体用于此字符,该字符将与字符编码无关,并且无论输出编码如何,都将正确呈现(以HTML格式)。

答案 2 :(得分:0)

尝试将其与"1½"

进行比较

答案 3 :(得分:0)

使用PHP chr函数以十六进制0xBD或dec 189创建字符:

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