2009-07-24 5 views
7

Tôi đang sử dụng PHP 5.2.6 và bộ ký tự của ứng dụng của tôi là UTF-8.thay đổi bộ ký tự mặc định của các hàm PHP như "htmlspecialchars"

Bây giờ, tôi nên thay đổi bộ ký tự mặc định của PHP như thế nào? KHÔNG phải chỉ định thời gian và bộ ký tự của đầu ra.

Nhưng đó sẽ thay đổi cho tất cả các chức năng PHP như htmlspecialchars, htmlentities vv

Tôi biết, có một tham số trong những chức năng mà mất bộ ký tự của chuỗi đầu vào. Nhưng tôi không muốn chỉ định cho tất cả các chức năng tôi sử dụng. Và nếu một nơi nào đó tôi quên, nó sẽ là lộn xộn.

Tôi cũng biết, mà tôi có thể quấn những chức năng và tạo wrapper của riêng tôi như:

function myHtmlize($str) 
{ 
    return htmlspecialchars($str, ENT_COMPAT, 'UTF-8'); 
} 

Tôi cũng, không thích giải pháp này.

Tôi thực sự muốn nói với PHP, theo mặc định, hãy 'UTF-8' làm bộ ký tự. Không phải 'iso-8859-1'.

Có thể không?

+2

Tôi không nghĩ điều đó là có thể nhưng đây là một câu hỏi hay. +1 – MitMaro

Trả lời

2

Như cái này? http://us2.php.net/manual/en/function.setlocale.php

* LC_ALL for all of the below 
* LC_COLLATE for string comparison, see strcoll() 
* LC_CTYPE for character classification and conversion, for example strtoupper() 
* LC_MONETARY for localeconv() 
* LC_NUMERIC for decimal separator (See also localeconv()) 
* LC_TIME for date and time formatting with strftime() 
* LC_MESSAGES for system responses (available if PHP was compiled with libintl) 
+1

Tôi không nhận được chính xác những gì tôi phải làm .. – Sabya

+0

Bạn đã kiểm tra cái này chưa? http://us2.php.net/manual/en/function.setlocale.php –

2

Có một C-chức năng determine_charset (char * charset_hint ...) được sử dụng để tìm ra "đúng" charset dựa trên

theo thứ tự đó và tuỳ thuộc vào việc một số phần mở rộng được xây dựng-in hay không.
Các "vấn đề" là, khi bạn gọi htmlentities ('xyz') determine_charset này() được gọi với charset_hint = NULL và là người đầu tiên chức năng này thực hiện là:

/* Guarantee default behaviour for backwards compatibility */ 
if (charset_hint == NULL) 
    return cs_8859_1; 

Bạn phải gọi ít nhất htmlentities ('xyz', ENT_QUOTES, '')

+1

Đó chính xác là những gì tôi muốn loại bỏ. – Sabya

+0

Tôi không thấy làm thế nào, trừ khi bạn thay đổi mã nguồn của php (rất có thể cho chức năng htmlentities) – VolkerK

1

tôi không hoàn toàn chắc chắn, nhưng tôi nghĩ mbstring.func_overload làm việc với htmlentities.

htmlspecialchars là btw trung tính charset. (Ít nhất là bộ ký tự hỗ trợ tập hợp con ascii, mà utf-8 làm).

+1

Điều này không hoàn toàn chính xác, bất cứ điều gì ngoài phạm vi ascii/win-1252 sẽ bị loại trừ bởi htmlentities nếu bạn không chỉ định bộ ký tự. – donatJ