Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > อยากอ่านค่าintรหัส ascii code ให้ได้เกิน 127 เพื่อจะนำค่าไปคำนวณต่อ



 

อยากอ่านค่าintรหัส ascii code ให้ได้เกิน 127 เพื่อจะนำค่าไปคำนวณต่อ

 



Topic : 136509



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์




อยากอ่านค่าascii code ให้ได้เกิน 127
เช่นอยากอ่านค่า Æ มันมีค่าเท่ากับ 198 อยากให้อ่านค่าออกมาได้ 198 เป็น int เพราะจะนำค่า 198 นี้ไปคำนวณอีกทีครับ ต้องใช้ฟังก์ชั่นอะไรหรอครับ

ปล.ตอนนี้ใช้ฟังก์ชัน ord แต่มันไม่สามารถอ่านตัวที่มีเลข ascii เกิน 127 ถ้าตัวไหนเกินค่าจะเพี้ยนครับ



Tag : PHP









ประวัติการแก้ไข
2021-11-26 15:19:18
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2021-11-26 14:52:57 By : BungYEE View : 651 Reply : 6
 

 

No. 1



โพสกระทู้ ( 4,716 )
บทความ ( 8 )



สถานะออฟไลน์


chr()
ปกติคำสั่ง chr() ( https://www.php.net/manual/en/function.chr.php ) จะแปลงเลขชุดเป็นตัวอักษรได้ แต่จะไม่รองรับอักขระ Unicode.
Quote:
However, note that this function is not aware of any string encoding, and in particular cannot be passed a Unicode code point value to generate a string in a multibyte encoding like UTF-8 or UTF-16.


เมื่อดูอักขระทั้งหลาย ( https://unicode-table.com/en/#007F ) จะเห็นว่าเลขชุดที่เลย 127 ไปแล้วจะเป็นอักขระแปลกๆของ unicode ทั้งนั้นเลย ดังนั้นการใช้ chr(128) ขึ้นไปจะกลายเป็นตัวอักษรเน่า คือสี่เหลี่ยมมีเครื่องหมายคำถามข้างใน.

Unicode point
เมื่อเป็นงี้จะแสดงอักขระหรือตัวอักษรที่เป็น unicode ทาง PHP ก็มีตัวเลือกให้ คือ
https://stackoverflow.com/questions/6058394/unicode-character-in-php-string
https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.unicode-codepoint-escape-syntax
Unicode point escape จะใช้ได้ตั้งแต่ PHP 7.0+ ขึ้นไป
ก็คือตั้งแต่เลขชุด 127 ( https://unicode-table.com/en/007F/ ) จะใช้ unicode U+007F หรือเอามาเขียนได้เป็น echo "\u{007f}";

ตัวอักษร Æ ที่ว่าก็จะเป็น U+00C6 หรือเขียนเป็น echo "\u{00c6}";

ความต่อเนื่องจาก 127
แล้วถ้าหากต้องการต่อเนื่องจาก 127 ก็จะใช้ chr() ไม่ได้แล้ว ทางแก้คือใช้ &# ตัวอย่างเช่น ~ จะเท่ากับ chr(126); ก็คือตัวอักษร ~ (tilde)

ตัวอักษร Æ ดูจากเว็บ unicode-table.com แล้วก็คือ 198 ก็จะใช้ Æ น่ะเอง

แปลงตัวอักษรเป็นตัวเลข
แต่การจะแปลงจากตัวอักษรเป็นตัวเลข ตามคำถามของ จขกท.

อย่างที่อธิบายมาข้างบน รวมถึงคำสั่ง ord เองก็ไม่ต่างกัน คือมันแปลง unicode ไม่ได้.
ทางแก้คือใช้ mb_ord ( https://www.php.net/manual/en/function.mb-ord.php ) แต่มันจะต้องเป็น PHP 7.2 ขึ้นไปเท่านั้น

ทีนี้สำหรับคนที่ใช้ PHP เก่ากว่า 7.2 ก็มีทางเลือกเหมือนกัน คือใช้ฟังก์ชั่นที่มีผู้เขียนในเว็บ PHP https://www.php.net/manual/en/function.ord.php#109812

Code (PHP)
function ordutf8($string, &$offset) {
    $code = ord(substr($string, $offset,1));
    if ($code >= 128) {        //otherwise 0xxxxxxx
        if ($code < 224) $bytesnumber = 2;                //110xxxxx
        else if ($code < 240) $bytesnumber = 3;        //1110xxxx
        else if ($code < 248) $bytesnumber = 4;    //11110xxx
        $codetemp = $code - 192 - ($bytesnumber > 2 ? 32 : 0) - ($bytesnumber > 3 ? 16 : 0);
        for ($i = 2; $i <= $bytesnumber; $i++) {
            $offset ++;
            $code2 = ord(substr($string, $offset, 1)) - 128;        //10xxxxxx
            $codetemp = $codetemp*64 + $code2;
        }
        $code = $codetemp;
    }
    $offset += 1;
    if ($offset >= strlen($string)) $offset = -1;
    return $code;
}

$offset = 0;
echo ordutf8('Æ', $offset);// 198









ประวัติการแก้ไข
2021-11-26 17:53:28
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-11-26 17:50:21 By : mr.v
 


 

No. 2



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : mr.v เมื่อวันที่ 2021-11-26 17:50:21
รายละเอียดของการตอบ ::
ds
ตอนนี้ผมใช้ mb_ord แล้วแต่มันก็ยังอ่านอักขระ Unicode ที่มีค่าascii เกิน127ยังไม่ได้ครับ
ตามรูป
บรรทัดบน>>stringที่จะนำมาอ่านค่าผสมทั้งอักษรธรรมดาและอักขระ Unicode
บรรทัดกลาง>>echo ดูค่าทุกตัวอักษรในstring แต่ตามภาพจะออกมาแค่ค่าของตัวอักษรธรรมดา อักขระ Unicodeจะไม่มีค่า
บรรทัดล่าง>>นำค่าจากบรรทัดกลางมา-65 จะเห็นได้ว่าค่าของอักขระ Unicodeจะมีค่าเป็น0เมื่อนำมา-65ก็จะมีค่าเท่ากับ-65

โค้ดอ้างอิงตามด้านล่างครับ
Code (PHP)
$str = "¬ell³D³rld";
for($i=0;$i<$len;$i++){
        echo mb_ord($str[$i]) . " ";
    }




ประวัติการแก้ไข
2021-11-26 21:04:06
2021-11-26 21:04:35
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-11-26 21:03:17 By : BungYEE
 

 

No. 3



โพสกระทู้ ( 4,716 )
บทความ ( 8 )



สถานะออฟไลน์


คุณลองอ่านแล้วสังเกตุดีๆ พวกฟังก์ชั่นตัวอักษรเดิมๆทั้งหลายของ php มันจะใช้งาน unicode แทบไม่ได้เลย อย่างเช่น chr(), ord()

จากตัวอย่างของคุณ $len ก็ไม่มีที่มา ผมก็เดาว่าน่าจะมาจาก strlen() อีก ซึ่งก็ใช้ไม่ได้กับ unicode. ทดลอง var_dump(strlen($string)); แล้วนับดูถ้าไม่ตรงก็รู้แล้ว.
แล้วการทำ string index อย่างเช่น $str[$i] ก็ใช้ไม่ได้เหมือนกัน ดูอ้างอิงจากนี่ https://stackoverflow.com/a/14566547/128761

เมื่อมันผิดมาตั้งแต่ต้น จะมาโยน mb_ord ที่มันถูกต้องอยู่แล้วลงไป ผลลัพธ์มันก็ไม่มีทางออกมาถูกต้องได้เลย!

ดังนั้นมันต้องเปลี่ยนใหม่สำหรับ unicode/multibyte

Code (PHP)
$string = '¬ell³D³rld';
$stringlength = mb_strlen($string);
var_dump($stringlength);// ได้ 10 ตัวอักษร ถูกต้อง

for ($i = 0; $i < $stringlength; $i++) {
    $eachChar = mb_substr($string, $i, 1);
    echo $eachChar;
    echo ' = ' . mb_ord($eachChar);
    echo '<br>';
}


ผลลัพธ์

Quote:
¬ = 172
e = 101
l = 108
l = 108
³ = 179
D = 68
³ = 179
r = 114
l = 108
d = 100





แม้แต่การแปลงกลับก็ยังตรง

Code (PHP)
$string = '¬ell³D³rld';
$stringlength = mb_strlen($string);
var_dump($stringlength);// 10

for ($i = 0; $i < $stringlength; $i++) {
    $eachChar = mb_substr($string, $i, 1);
    echo $eachChar;
    $charNum = mb_ord($eachChar);
    echo ' = ' . $charNum ;
    echo ' =&gt; ' . mb_chr($charNum);
    echo '<br>';
}


Quote:
¬ = 172 => ¬
e = 101 => e
l = 108 => l
l = 108 => l
³ = 179 => ³
D = 68 => D
³ = 179 => ³
r = 114 => r
l = 108 => l
d = 100 => d



ประวัติการแก้ไข
2021-11-26 23:07:19
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-11-26 23:03:08 By : mr.v
 


 

No. 4



โพสกระทู้ ( 9,553 )
บทความ ( 2 )



สถานะออฟไลน์


ลองใช้ json_encode ช่วย
เมื่อ convert เป็น json พวก uncode จะ กลายเป็น \uxxyy
โดย xxจะเป็น ตัวเลข Hexa ของ byte แรก และ yy เป็นของ byte หลัง
ก็ลองศึกษาดูครับ เพื่อจะได้ประโยชน์
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-11-27 19:01:32 By : Chaidhanan
 


 

No. 5



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : Chaidhanan เมื่อวันที่ 2021-11-27 19:01:32
รายละเอียดของการตอบ ::
ตอนนี้ผมได้ลอง return เป็น json_encode แล้วครับแล้วเป็นอย่างที่พี่บอกเลยครับมันออกมาเป็น\uxxyy(ดังรูปที่1) แต่ตอนนี้ผมอยากให้ return json แต่เป็นตัวอักษรSymbol (รูปที่2) ครับต้องทำอย่างไรครับ
jsss
รูปที่1
js1
รูปที่2




ประวัติการแก้ไข
2021-11-28 17:49:10
2021-11-28 17:51:09
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-11-28 17:47:16 By : BungYEE
 


 

No. 6



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : BungYEE เมื่อวันที่ 2021-11-28 17:47:16
รายละเอียดของการตอบ ::
ตอนนี้ผมแก้ได้แล้วครับ โดยการแก้ตรงง return

return json_encode($de, JSON_UNESCAPED_UNICODE);


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-11-28 19:14:30 By : BungYEE
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : อยากอ่านค่าintรหัส ascii code ให้ได้เกิน 127 เพื่อจะนำค่าไปคำนวณต่อ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่