Tôi muốn viết một trình phân tích cú pháp (HTML) dựa trên máy trạng thái nhưng tôi nghi ngờ cách đọc/sử dụng đầu vào một cách hợp lý. Tôi quyết định nạp toàn bộ đầu vào vào một chuỗi và sau đó làm việc với nó như một mảng và giữ chỉ mục của nó như là vị trí phân tích cú pháp hiện tại.Phân tích chuỗi đa chuỗi trong PHP
Sẽ không có vấn đề gì với mã hóa một byte, nhưng trong mã hóa nhiều byte, mỗi giá trị không đại diện cho một ký tự, mà là một byte của ký tự.
Ví dụ:
$mb_string = 'žščř'; //4 multi-byte characters in UTF-8
for($i=0; $i < 4; $i++)
{
echo $mb_string[$i], PHP_EOL;
}
Đầu ra:
Ĺ
ž
Ĺ
Ą
này có nghĩa là tôi không thể lặp qua các chuỗi trong một vòng lặp để kiểm tra nhân vật duy nhất, bởi vì tôi không bao giờ biết nếu tôi ở giữa một nhân vật hay không.
Vì vậy, câu hỏi là:
- Làm thế nào để an toàn đa byte đọc một ký tự đơn từ một chuỗi theo một cách thân thiện hiệu suất?
- Bạn nên làm việc với chuỗi vì nó là một mảng trong trường hợp này?
- Bạn đọc đầu vào như thế nào?
Lưu ý rằng phần ý kiến cho 'mb_split' có bao gồm nhiều ví dụ về cách tách chuỗi nhiều byte thành một mảng ký tự - ví dụ: http://us2.php.net/manual/en/function.mb-split.php#80046 – Amber
@Dav I don ' Tôi nghĩ anh ấy thực sự cần một mảng. –
bởi đầu vào Tôi có nghĩa là mã HTML để phân tích cú pháp. Có lẽ có cách hoàn toàn khác nhau làm thế nào để sử dụng chuỗi với máy nhà nước mà tôi đang thiếu :-) ...nhưng mb_substr trông ổn (nếu tôi biết mã hóa chuỗi, điều này không rõ ràng) –