ขีดจำกัดความยาวบรรทัด PHP
มันทำงานอย่างไร? - ชิปเอ็นเอฟซี
การให้คำปรึกษาออนไลน์เกี่ยวกับการบำรุงรักษาเว็บไซต์ใน Ulyanovsk: ICQ# 179104682 วิธีการตัดแต่งสาย Cyrillic
โดยใช้ PHP
วันที่เผยแพร่บทความ: 06/01/2014
การสร้างเว็บไซต์ใน Ulyanovsk ด้วยฟังก์ชันการทำงานที่จริงจังและการโต้ตอบกับฐานข้อมูลมักต้องการให้บรรทัดบางบรรทัดไม่เกินปริมาณที่ระบุ อาจจำเป็น เช่น เพื่อจำกัดจำนวนอักขระที่ส่งไปยังเซิร์ฟเวอร์ฐานข้อมูลโดยใช้ฟิลด์อินพุต เพื่อแสดงเพียงส่วนหนึ่งของบรรทัดบนหน้าไซต์ (เช่น เมื่อสร้างประกาศข่าวที่มีความสูงเท่ากันในรายการ) และสำหรับงานอื่นๆอีกมากมาย สิ่งแรกที่โปรแกรมเมอร์มือใหม่เจอคือฟังก์ชันย่อย PHP จริงๆ แล้วมันถูกใช้เพื่อตัดแต่งสตริงและไวยากรณ์ของมันก็ง่ายส่วนย่อย (สตริง, int start [, int length]) โดยที่ int start คืออักขระเริ่มต้นที่จะเริ่มตัดสตริง และพารามิเตอร์ทางเลือก int length คือจำนวนอักขระที่จะตัด อย่างไรก็ตาม อาจดูแปลกสำหรับโปรแกรมเมอร์ที่ไม่มีประสบการณ์หากเขาพยายามใช้มันเพื่อตัดสตริงซีริลลิกใน PHP เนื่องจากสตริงย่อยทำงานกับสตริงซีริลลิก เครื่องหมายคำถามหรือเครื่องหมายคำถามในรูปเพชรอาจปรากฏขึ้นที่ส่วนท้ายของสตริงที่ตัดแต่ง และจำนวนทั้งหมด
ด้วยเหตุผลบางประการ อักขระที่ตัดจะน้อยกว่าที่ระบุไว้ในพารามิเตอร์ int length ถึงสองเท่า ทำไมสิ่งนี้ถึงเกิดขึ้น?
ความจริงก็คืออักขระภาษารัสเซียใน UTF-8 มีขนาด 2 ไบต์และอักขระละตินมีขนาดเพียง 1 ไบต์เท่านั้น ฟังก์ชั่นย่อย PHP จะตัดสตริงเป็นไบต์ ไม่ใช่ตามอักขระ หากสตริงประกอบด้วยอักขระละตินก็ไม่มีอะไรแปลกเกิดขึ้นเนื่องจากจำนวนอักขระตรงกับจำนวนไบต์ และเมื่อทำงานกับตัวอักษรซีริลลิกซึ่งอักขระแต่ละตัวมีขนาด 2 ไบต์พารามิเตอร์ความยาว int สามารถตกไปที่ "ตรงกลาง" ของอักขระได้อย่างง่ายดายและด้วยเหตุนี้เมื่อสิ้นสุดบรรทัดที่ตัดเมื่อส่งออกเราจะ เห็นเครื่องหมายคำถามอาภัพนั้นอยู่ในเพชร
จะตัดส่วนหนึ่งของบรรทัดด้วยอักษรซีริลลิกอย่างถูกต้องได้อย่างไร? วิธีแก้ปัญหานี้ง่ายมากจริงๆ หากต้องการตัดบรรทัดที่มี PHP อย่างถูกต้องอักขระซีริลลิก
คุณต้องใช้ฟังก์ชัน PHP iconv_substr
ไวยากรณ์ของฟังก์ชันนั้นง่าย:
iconv_substr (สตริง, int start [, int length [, ชุดอักขระ]])
$new_string = iconv_substr ($string, 0 , 80 , “UTF-8”);
หมายเลขศูนย์ในตัวอย่างหมายความว่าการนับ 80 อักขระเริ่มต้นจากจุดเริ่มต้นของบรรทัด
การทำงาน สิ่งแรกที่โปรแกรมเมอร์มือใหม่เจอคือฟังก์ชันย่อย PHP จริงๆ แล้วมันถูกใช้เพื่อตัดแต่งสตริงและไวยากรณ์ของมันก็ง่าย($string, $start, $length) โดยที่ $string เป็นตัวแปรที่มีข้อความ $start คืออักขระที่เริ่มนับถอยหลัง (0 ถือเป็นอักขระตัวแรก) และ $length คือจำนวนอักขระของ ข้อความที่เลือก$text = "ตัวอย่างและข้อความ";
$first = substr($ข้อความ,0,6); // แสดงอักขระ 6 ตัวโดยเริ่มจากตำแหน่ง 0 ตัวแรกสุด
สะท้อน $ก่อน; // จะส่งออก "ตัวอย่าง"
$วินาที = ซับสเตรต($ข้อความ,8,3); // แสดง 3 ตัวอักษร ตั้งแต่วันที่ 8
สะท้อน $ วินาที; // จะพิมพ์ "และ"
หากคุณไม่ได้ระบุพารามิเตอร์ Number of character (หลักที่ 2) ฟังก์ชันจะแสดงอักขระที่เหลือทั้งหมด
$text = "ตัวอย่างและข้อความ";
$สาม = ย่อย($ข้อความ,8); // แสดงอักขระทั้งหมดตั้งแต่วันที่ 8
เสียงสะท้อน $ ที่สาม; // จะพิมพ์ "และข้อความ"
ตัดแต่งข้อความภาษารัสเซียโดยใช้ฟังก์ชัน mb_substr PHP
การทำงาน mb_substrปฏิบัติงานเช่นเดียวกับ สิ่งแรกที่โปรแกรมเมอร์มือใหม่เจอคือฟังก์ชันย่อย PHP จริงๆ แล้วมันถูกใช้เพื่อตัดแต่งสตริงและไวยากรณ์ของมันก็ง่ายแต่ยังสามารถจัดการการเข้ารหัสแบบหลายไบต์ได้ ดังนั้นในกรณีของข้อความภาษารัสเซียจะเป็นประโยชน์สำหรับคุณ mb_substr- ทำงานเหมือนกัน$text = "ข้อความตัวอย่าง";
$first = mb_substr($text,0,6,"UTF-8"); // แสดงอักขระ 6 ตัวโดยเริ่มจากตำแหน่ง 0 ตัวแรกสุด
// ความสนใจ! ระบุการเข้ารหัส ข้อความต้นฉบับ- ในกรณีนี้คือ utf-8
สะท้อน $ก่อน; // จะแสดง "ตัวอย่าง"
$วินาที = mb_substr($ข้อความ,7,6,"UTF-8"); // แสดง 6 ตัวอักษร ตั้งแต่วันที่ 7
สะท้อน $ วินาที; // จะส่งออก "ข้อความ"
โปรดทราบว่าในกรณีของ Cyrillic (ข้อความภาษารัสเซีย) ควรระบุการเข้ารหัสที่ส่วนท้ายของฟังก์ชันจะดีกว่า ตัวอย่างนี้ใช้ตัวเลือกยอดนิยม - UTF-8
การตัดข้อความจากส่วนท้าย
หากคุณต้องการตัดข้อความจากส่วนท้าย ในการดำเนินการนี้ เราจะระบุจำนวนลบสำหรับตัวแปรเพื่อระบุว่าการเลือกข้อความเริ่มต้นด้วยอักขระตัวใด$text = "สไปรท์และแฟนต้า";
$first = substr($ข้อความ,-6,5); // แสดง 5 ตัวอักษร เริ่มจากตัวที่ 6 นับจากท้ายสุด
สะท้อน $ก่อน; //จะพิมพ์คำว่า Fant
หลังจากตัดแต่งแล้ว เราก็เพิ่มข้อความด้วย
หลังจากตัดแต่งตัวแปรด้วยข้อความแล้ว ให้เพิ่มข้อความเพิ่มเติมที่ส่วนท้าย$ตัวอย่าง = " ข้อความข้อความ";
$example = substr($ตัวอย่าง,0,9); // แสดงอักขระ 9 ตัวโดยเริ่มจากตำแหน่ง 0 ตัวแรกสุด
$example .= "เพิ่มเติม...";
สะท้อน $ ตัวอย่าง; // จะแสดงข้อความ "ข้อความเพิ่มเติม..."
ในทางตรงกันข้าม คุณสามารถบันทึกเสียงตั้งแต่ต้น แล้วจึงตัดแต่งข้อความได้
$text = "ลุง";
$example = "จอร์จและไมเคิล";
$example = substr($ตัวอย่าง,0,6); // แสดงอักขระ 6 ตัวโดยเริ่มจากตำแหน่ง 0 ตัวแรกสุด
$ข้อความ .= $ตัวอย่าง;
สะท้อน $ข้อความ; //จะพิมพ์ "ลุงจอร์จ"
ตัดแต่งข้อความเป็นช่องว่างแรก
$text = "สวัสดีชาวโลก!";echo substr($text, 0, strpos($text, " ")); // พิมพ์ว่า "สวัสดี"
ฟังก์ชัน PHP สำเร็จรูปสำหรับการตัดข้อความด้วย PHP Words
ฟังก์ชั่นตัด($string, $length)($string = mb_substr($string, 0, $length,"UTF-8"); // ตัดและทำงานกับการเข้ารหัสทั้งหมดและระบุการเข้ารหัสแหล่งที่มา
$position = mb_strrpos($string, " ", "UTF-8"); // กำหนดตำแหน่งของช่องว่างสุดท้าย ด้วยเหตุนี้เราจึงแยกคำออกจากกัน
$string = mb_substr($string, 0, $position, "UTF-8"); // ตัดตัวแปรตามตำแหน่ง
ส่งคืน $string;
}
$text = "สงครามทางเหนือสิ้นสุดในปี ค.ศ. 1721";
ตัดเสียงสะท้อน($ข้อความ, 17); // จะแสดง "สงครามเหนือ" โดยไม่มีคำว่า "สิ้นสุด"
คุณสามารถตัดคำผ่านอาร์เรย์...
$text = "Microsoft ก่อตั้งโดย Bill Gates ในปี 1975";$array = explode(" ",$text); // ประมวลผลสตริงเป็นอาร์เรย์
$array = array_slice($array,0,5); // เลือกองค์ประกอบคำ 5 คำแรก
$newtext = ระเบิด(" ",$array); // แปลงอาร์เรย์กลับเป็นสตริง
Echo $newtext;//จะแสดง "Microsoft ก่อตั้งโดย Bill Gates"
เค้าโครงเว็บไซต์แบบปรับเปลี่ยนได้เกี่ยวข้องกับการเปลี่ยนแปลงหน้าเว็บอย่างเพียงพอ ขึ้นอยู่กับอุปกรณ์ที่ผู้เยี่ยมชมใช้ หากเกี่ยวกับองค์ประกอบบล็อกและอินไลน์เกือบทุกอย่างสามารถ "อัตโนมัติ" ได้โดยใช้ CSS และ JavaScript ดังนั้นเมื่อสร้างเนื้อหาและใช้ฐานข้อมูลจะทำได้ยากหากไม่มีฝั่งเซิร์ฟเวอร์
โดยปกติเราจะตัดทอนบรรทัดใน PHP เมื่อใด องค์ประกอบ HTMLเค้าโครงมีการจำกัดจำนวนอักขระที่มองเห็นได้ แต่นี่เป็นงานส่วนตัว
โซลูชันแบบดั้งเดิม
หนึ่งในฟังก์ชันยอดนิยมและใช้บ่อยที่สุดคือ substr() พารามิเตอร์สองหรือสามตัวถูกส่งไป:
- สตริงต้นทาง ตำแหน่งเริ่มต้น ($iPos); ความยาวของสตริงย่อยที่จะตัด ($iLen)
พารามิเตอร์สุดท้ายสามารถละเว้นได้ หากกำหนดพารามิเตอร์เพียงสองตัวเท่านั้น ผลลัพธ์ของ substr() จะเป็นสตริงย่อย ตั้งแต่ตำแหน่งเริ่มต้น ($iPos) จนถึงจุดสิ้นสุดของสตริงต้นฉบับ หากผ่านพารามิเตอร์สามตัวให้ตัดออก สตริง PHPจากตำแหน่งเริ่มต้น ($iPos) ไปจนถึงความยาวที่ระบุ ($iLen)
การเลือกเฉพาะจุดเริ่มต้นของสตริงโดยใช้ฟังก์ชันนี้สามารถทำได้เมื่อพารามิเตอร์แรกเป็นศูนย์ หากตำแหน่งเริ่มต้นเป็นลบ PHP จะถือว่าอักขระที่ตำแหน่ง $iPos จากจุดสิ้นสุดของสตริงเป็นจุดเริ่มต้นที่เราตัดทอนสตริง อักขระในบรรทัดจะมีหมายเลขเริ่มต้นจากศูนย์
ฟังก์ชั่นพิเศษ
PHP พิจารณางาน "ตัดสตริง" (ในความหมายกว้างๆ) ในบริบท: จากทั้งสองฝ่าย ในอดีต นี่คือฟังก์ชัน trim() ซึ่งมีจุดมุ่งหมายเพื่อลบอักขระที่ไม่มีนัยสำคัญ:
- ช่องว่าง; ตัวแบ่งบรรทัด; การคืนรถ; การจัดตาราง; อักขระว่าง
จากปลายทั้งสองของเส้น นี่เป็นฟีเจอร์ที่ได้รับความนิยมมาก โดยเฉพาะอย่างยิ่งเมื่อทำงานกับฐานข้อมูล ซึ่งการเลือกมักจะประกอบด้วยช่องว่างจำนวนมาก การใช้ฟังก์ชัน explode() มักจะส่งผลให้มีอักขระพิเศษที่จุดเริ่มต้นและจุดสิ้นสุดของสตริง
อย่างไรก็ตาม ไม่ใช่นักพัฒนาทุกคนจะใช้ฟังก์ชัน trim() อย่างเต็มประสิทธิภาพ สำหรับงาน "ตัดทอนสตริง" PHP ขอแนะนำให้ใช้พารามิเตอร์ตัวที่สองของฟังก์ชัน ซึ่งคุณสามารถระบุชุดอักขระใดๆ ที่ควรตัดออกจากสตริงต้นฉบับได้
สิ่งสำคัญคือต้องลบอักขระออกจากจุดเริ่มต้นและจุดสิ้นสุดของสตริงต้นฉบับเท่านั้น สิ่งสำคัญคือต้องจัดการมาสก์ของตัวละครที่จะลบและลำดับของงานย่อย
- ขั้นแรก เราตัดสตริง PHP ออกไปครั้งละหนึ่งมาสก์ แล้วอีกอย่างหนึ่ง จากนั้นในวันที่สาม
เป็นผลมาจากลำดับของตัวเลือกสำหรับการใช้ฟังก์ชันเดียว เราจึงตัดข้อความใน PHP ออกตามความจำเป็นในการแก้ปัญหา
วิธีการที่ไม่ได้มาตรฐาน
หากเราไม่พิจารณาช่วงของฟังก์ชันบรรทัดทั้งหมดของภาษา คู่ของฟังก์ชัน explode()/implode() และฟังก์ชัน str_replace() จะช่วยให้คุณสามารถแก้ปัญหาที่ไม่ได้มาตรฐานของข้อมูลบรรทัด "การตัด"
ผลลัพธ์ของการสืบค้น MySQL จะเป็นทางการเสมอในโครงสร้างของข้อมูลที่ส่งคืน และเนื้อหาของฟิลด์ (องค์ประกอบ) ของผลลัพธ์จะถูกกำหนดโดยแหล่งที่มาเสมอ นั่นคือนักพัฒนาที่ออกแบบฐานข้อมูล
นี่เป็นตัวอย่างเฉพาะ แต่จะตอบคำถามได้อย่างแน่นอน: วิธีตัดทอนบรรทัดใน PHP เมื่อมีหลายบรรทัด ฟังก์ชัน trm() เป็นฟังก์ชันเฉพาะ และประวัติของฟังก์ชันถูกกำหนดโดยงานเมื่อมีข้อมูลไม่มากนัก และไม่จำเป็นต้องตัดสิ่งอื่นใดนอกจากอักขระที่ไม่มีนัยสำคัญ
ปัจจุบัน ข้อมูลถูกเผยแพร่ในปริมาณมาก และการตัดทีละบรรทัดไม่เพียงแต่ไม่จำเป็น แต่ยังไม่มีเหตุผลอีกด้วย
การแยกออกเป็นส่วนประกอบก็เป็นทางเลือกเช่นกัน เช่น การตัดสตริงออก PHP จะระเบิด () โดยอัตโนมัติเพื่อตัดอันหนึ่ง ข้อความขนาดใหญ่สำหรับบรรทัดที่จำเป็นมากมาย ด้วยการใช้ฟังก์ชัน str_replace() − นั่นคือการแทนที่อักขระตัวหนึ่งด้วยตัวอื่น − คุณจะได้ผลลัพธ์ที่คล้ายกัน
ประการแรก พลวัตและปริมาณของข้อมูลที่จำเป็นต้องประมวลผลถือเป็นวิธีแก้ปัญหาที่เพียงพอ และไม่ใช่การใช้ฟังก์ชันพิเศษเพียงฟังก์ชันเดียว
ไซต์ยอมรับการเปลี่ยนแปลงที่เพียงพอในหน้าต่างๆ ขึ้นอยู่กับอุปกรณ์ที่ผู้เยี่ยมชมใช้ หากเกี่ยวกับองค์ประกอบบล็อกและอินไลน์เกือบทุกอย่างสามารถ "อัตโนมัติ" ได้โดยใช้ CSS และ JavaScript ดังนั้นเมื่อสร้างเนื้อหาและใช้ฐานข้อมูลจะทำได้ยากหากไม่มีฝั่งเซิร์ฟเวอร์
โดยปกติเราจะตัดทอนบรรทัดใน PHP เมื่อองค์ประกอบเค้าโครง HTML มีการจำกัดจำนวนอักขระที่มองเห็นได้ แต่นี่เป็นงานส่วนตัว
โซลูชันแบบดั้งเดิม
หนึ่งในฟังก์ชันยอดนิยมและใช้บ่อยที่สุดคือ substr() พารามิเตอร์สองหรือสามตัวถูกส่งไป:
- สตริงต้นทาง
- ตำแหน่งเริ่มต้น ($iPos);
- ความยาวของสตริงย่อยที่จะตัด ($iLen)
พารามิเตอร์สุดท้ายสามารถละเว้นได้ หากกำหนดพารามิเตอร์เพียงสองตัวเท่านั้น ผลลัพธ์ของ substr() จะเป็นสตริงย่อย ตั้งแต่ตำแหน่งเริ่มต้น ($iPos) จนถึงจุดสิ้นสุดของสตริงต้นฉบับ หากผ่านพารามิเตอร์สามตัว เราจะตัดสตริง PHP จากตำแหน่งเริ่มต้น ($iPos) ให้เป็นความยาวที่ระบุ ($iLen)
การเลือกเฉพาะจุดเริ่มต้นของสตริงโดยใช้ฟังก์ชันนี้สามารถทำได้เมื่อพารามิเตอร์แรกเป็นศูนย์ หากตำแหน่งเริ่มต้นเป็นลบ PHP จะถือว่าอักขระที่ตำแหน่ง $iPos จากจุดสิ้นสุดของสตริงเป็นจุดเริ่มต้นที่เราตัดทอนสตริง อักขระในบรรทัดจะมีหมายเลขเริ่มต้นจากศูนย์
ฟังก์ชั่นพิเศษ
PHP พิจารณางาน "ตัดสตริง" (ในความหมายกว้างๆ) ในบริบท: จากทั้งสองฝ่าย ในอดีต นี่คือฟังก์ชัน trim() ซึ่งมีจุดมุ่งหมายเพื่อลบอักขระที่ไม่มีนัยสำคัญ:
- ช่องว่าง;
- ตัวแบ่งบรรทัด;
- การคืนรถ;
- การจัดตาราง;
- อักขระว่าง
จากปลายทั้งสองของเส้น นี่เป็นฟีเจอร์ที่ได้รับความนิยมมาก โดยเฉพาะอย่างยิ่งเมื่อทำงานกับฐานข้อมูล ซึ่งการเลือกมักจะประกอบด้วยช่องว่างจำนวนมาก การใช้ฟังก์ชัน explode() มักจะส่งผลให้มีอักขระพิเศษที่จุดเริ่มต้นและจุดสิ้นสุดของสตริง
อย่างไรก็ตาม ไม่ใช่นักพัฒนาทุกคนจะใช้ฟังก์ชัน trim() อย่างเต็มประสิทธิภาพ สำหรับงาน "ตัดทอนสตริง" PHP ขอแนะนำให้ใช้พารามิเตอร์ตัวที่สองของฟังก์ชัน ซึ่งคุณสามารถระบุชุดอักขระใดๆ ที่ควรตัดออกจากสตริงต้นฉบับได้
สิ่งสำคัญคือต้องลบอักขระออกจากจุดเริ่มต้นและจุดสิ้นสุดของสตริงต้นฉบับเท่านั้น สิ่งสำคัญคือต้องจัดการมาสก์ของตัวละครที่จะลบและลำดับของงานย่อย
- ขั้นแรก เราตัดสตริง PHP ออกไปครั้งละหนึ่งมาสก์
- แล้วอีกอย่างหนึ่ง
- จากนั้นในวันที่สาม
เป็นผลมาจากลำดับของตัวเลือกสำหรับการใช้ฟังก์ชันเดียว เราจึงตัดข้อความใน PHP ออกตามความจำเป็นในการแก้ปัญหา
วิธีการที่ไม่ได้มาตรฐาน
หากเราไม่พิจารณาช่วงของฟังก์ชันบรรทัดทั้งหมดของภาษา คู่ของฟังก์ชัน explode()/implode() และฟังก์ชัน str_replace() จะช่วยให้คุณสามารถแก้ปัญหาที่ไม่ได้มาตรฐานของข้อมูลบรรทัด "การตัด"
ผลลัพธ์ของการสืบค้น MySQL จะเป็นทางการเสมอในโครงสร้างของข้อมูลที่ส่งคืน และเนื้อหาของฟิลด์ (องค์ประกอบ) ของผลลัพธ์จะถูกกำหนดโดยแหล่งที่มาเสมอ นั่นคือนักพัฒนาที่ออกแบบฐานข้อมูล
นี่เป็นตัวอย่างเฉพาะ แต่จะตอบคำถามได้อย่างแน่นอน: วิธีตัดทอนบรรทัดใน PHP เมื่อมีหลายบรรทัด ฟังก์ชัน trm() เป็นฟังก์ชันเฉพาะ และประวัติของฟังก์ชันถูกกำหนดโดยงานเมื่อมีข้อมูลไม่มากนัก และไม่จำเป็นต้องตัดสิ่งอื่นใดนอกจากอักขระที่ไม่มีนัยสำคัญ
ปัจจุบัน ข้อมูลถูกเผยแพร่ในปริมาณมาก และการตัดทีละบรรทัดไม่เพียงแต่ไม่จำเป็น แต่ยังไม่มีเหตุผลอีกด้วย
การแยกออกเป็นส่วนประกอบก็เป็นทางเลือกเช่นกัน เช่น การตัดสตริงออก PHP จะใช้ explode() โดยอัตโนมัติเพื่อตัดข้อความขนาดใหญ่หนึ่งบรรทัดให้เป็นหลายบรรทัดที่ต้องการ ด้วยการใช้ฟังก์ชัน str_replace() − นั่นคือการแทนที่อักขระตัวหนึ่งด้วยตัวอื่น − คุณจะได้ผลลัพธ์ที่คล้ายกัน
ประการแรก พลวัตและปริมาณของข้อมูลที่จำเป็นต้องประมวลผลถือเป็นวิธีแก้ปัญหาที่เพียงพอ และไม่ใช่การใช้ฟังก์ชันพิเศษเพียงฟังก์ชันเดียว