PHP 7 แนะนำการรองรับ\u
ไวยากรณ์ Unicode โดยตรง
ตามที่ผู้อื่นกล่าวถึงวิธีเดียวที่จะได้รับค่าสตริงจากคำอธิบายอักขระ Unicode ที่เหมาะสมใน PHP คือการแปลงจากสิ่งอื่น (เช่นการแยก JSON, การแยกวิเคราะห์ JSON, HTML การแยกหรือรูปแบบอื่น ๆ ) แต่สิ่งนี้มาพร้อมกับประสิทธิภาพค่าใช้จ่ายในการทำงาน
อย่างไรก็ตามมีอีกหนึ่งตัวเลือก คุณสามารถเข้ารหัสอักขระโดยตรงใน PHP ด้วยการ\x
หลบหนีแบบไบนารี \x
ไวยากรณ์หลบหนีนอกจากนี้ยังได้รับการสนับสนุนใน PHP 5
สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณไม่ต้องการใส่อักขระโดยตรงในสตริงผ่านรูปแบบธรรมชาติ ตัวอย่างเช่นถ้ามันเป็นตัวควบคุมที่มองไม่เห็นหรืออื่น ๆ ที่ยากที่จะตรวจสอบช่องว่าง
ครั้งแรกตัวอย่างหลักฐาน:
// Unicode Character 'HAIR SPACE' (U+200A)
$htmlEntityChar = " ";
$realChar = html_entity_decode($htmlEntityChar);
$phpChar = "\xE2\x80\x8A";
echo 'Proof: ';
var_dump($realChar === $phpChar); // bool(true)
โปรดทราบว่าตามที่ Pacerier พูดถึงในคำตอบอื่นรหัสเลขฐานสองนี้เป็นรหัสเฉพาะสำหรับการเข้ารหัสอักขระเฉพาะ ในตัวอย่างข้างต้น\xE2\x80\x8A
เป็นการเข้ารหัสแบบไบนารีสำหรับ U + 200A ใน UTF-8
คำถามต่อไปคือคุณจะU+200A
ไปจากได้\xE2\x80\x8A
อย่างไร
ด้านล่างนี้เป็นสคริปต์ PHP เพื่อสร้างลำดับการยกเว้นสำหรับตัวละครใด ๆ โดยอิงจากสตริง JSON, เอนทิตี HTML หรือวิธีอื่นใด ๆ เมื่อคุณมีมันเป็นสตริงดั้งเดิม
function str_encode_utf8binary($str) {
/** @author Krinkle 2018 */
$output = '';
foreach (str_split($str) as $octet) {
$ordInt = ord($octet);
// Convert from int (base 10) to hex (base 16), for PHP \x syntax
$ordHex = base_convert($ordInt, 10, 16);
$output .= '\x' . $ordHex;
}
return $output;
}
function str_convert_html_to_utf8binary($str) {
return str_encode_utf8binary(html_entity_decode($str));
}
function str_convert_json_to_utf8binary($str) {
return str_encode_utf8binary(json_decode($str));
}
// Example for raw string: Unicode Character 'INFINITY' (U+221E)
echo str_encode_utf8binary('∞') . "\n";
// \xe2\x88\x9e
// Example for HTML: Unicode Character 'HAIR SPACE' (U+200A)
echo str_convert_html_to_utf8binary(' ') . "\n";
// \xe2\x80\x8a
// Example for JSON: Unicode Character 'HAIR SPACE' (U+200A)
echo str_convert_json_to_utf8binary('"\u200a"') . "\n";
// \xe2\x80\x8a