10/10/2018, 11:02
[PHP] Hỏi về hàm addslashes
Chào mọi người, hiện mình đang có vấn đề với hàm addslashes, mình post lên đây hy vọng mọi người hỗ trợ và cùng mình nghiên cứu giải quyết vấn đề này.
Vấn đề đặt ra như sau:
Mọi người đều biết hàm addslashes có tác dụng thêm dấu ở trước dấu '. VD:
Trước khi insert chuỗi vào CSDL thì mình đều dùng hàm addslashes này (Tất cả chuỗi trong bài viết của mình đều có dấu ' bên trong). Nếu không dùng hàm này thì insert không được và cho dù được thì khi show ra web sẽ bị lỗi.
Câu hỏi đầu tiên của mình là: Mọi người có dùng hàm addslashes trước khi insert chuỗi vào CSDL giống như mình không? Ngoài cách này thì còn cách lưu trữ chuỗi nào tốt hơn không?
Tiếp theo nữa là vấn đề về "cách đối xử" của host đối với hàm addslashes này. Mình dùng qua nhiều host của nhiều nhà cung cấp khác nhau thì phát hiện ra có sự khác biệt khi dùng hàm này. Một số host khi insert không addslashes thì dữ liệu vẫn vào được, một số lại không (Cùng code, cùng chuỗi insert). Đối với các host bắt buộc addslashes khi insert chuỗi có dấu ' thì addslashes($a) theo VD ở trên khi vào CSDL vẫn sẽ là "It's John's car!" chứ không phải là "It's John's car!". Đối với các host không bắt buộc nhập addslashes thì ngược lại.
Như vậy cùng 1 mã nguồn và up lên 2 host khác nhau thì CSDL sẽ được insert vào khác nhau. 1 có dấu và 1 không có dấu .
Với bản thân mình, khi code web muốn chạy & hiển thị đúng trên mọi host, mình luôn dùng thêm hàm stripslashes mỗi khi select chuỗi từ CSDL ra. Hàm stripslashes sẽ giúp loại bỏ những dấu và kết quả hiển thị đúng.
Tuy đã có cách giải quyết nhưng mình nghĩ vẫn chưa tối ưu lắm. Cho nên câu hỏi thứ 2 của mình là: Có cách nào giải quyết để hàm addslashes luôn chạy đúng trên mọi host không? Có hàm nào check xem host đang sử dụng có bắt buộc phải addslashes khi insert chuỗi có dấu ' không?
Ok! Hy vọng mọi người tham gia thảo luận cùng mình để code ngày càng tối ưu hơn!
Thanks!
Vấn đề đặt ra như sau:
Mọi người đều biết hàm addslashes có tác dụng thêm dấu ở trước dấu '. VD:
PHP Code:
<?php
$a = "It's John's car!";
echo addslashes($a); // Kết quả in ra là: It's John's car!
?>
Câu hỏi đầu tiên của mình là: Mọi người có dùng hàm addslashes trước khi insert chuỗi vào CSDL giống như mình không? Ngoài cách này thì còn cách lưu trữ chuỗi nào tốt hơn không?
Tiếp theo nữa là vấn đề về "cách đối xử" của host đối với hàm addslashes này. Mình dùng qua nhiều host của nhiều nhà cung cấp khác nhau thì phát hiện ra có sự khác biệt khi dùng hàm này. Một số host khi insert không addslashes thì dữ liệu vẫn vào được, một số lại không (Cùng code, cùng chuỗi insert). Đối với các host bắt buộc addslashes khi insert chuỗi có dấu ' thì addslashes($a) theo VD ở trên khi vào CSDL vẫn sẽ là "It's John's car!" chứ không phải là "It's John's car!". Đối với các host không bắt buộc nhập addslashes thì ngược lại.
Như vậy cùng 1 mã nguồn và up lên 2 host khác nhau thì CSDL sẽ được insert vào khác nhau. 1 có dấu và 1 không có dấu .
Với bản thân mình, khi code web muốn chạy & hiển thị đúng trên mọi host, mình luôn dùng thêm hàm stripslashes mỗi khi select chuỗi từ CSDL ra. Hàm stripslashes sẽ giúp loại bỏ những dấu và kết quả hiển thị đúng.
Tuy đã có cách giải quyết nhưng mình nghĩ vẫn chưa tối ưu lắm. Cho nên câu hỏi thứ 2 của mình là: Có cách nào giải quyết để hàm addslashes luôn chạy đúng trên mọi host không? Có hàm nào check xem host đang sử dụng có bắt buộc phải addslashes khi insert chuỗi có dấu ' không?
Ok! Hy vọng mọi người tham gia thảo luận cùng mình để code ngày càng tối ưu hơn!
Thanks!
Bài liên quan
$a = "It's John's car!";
$a=str_replace("'","'",$a);
echo $a."<hr>";
?>
<?php
$a = "It's John's car!";
echo str_replace("'", "'",$a);
?>
* get_magic_quotes_gpc() sẽ trả về 1 nếu source code nằm trên host không bắt buộc phải addslashes khi insert chuỗi có ', ngược lại trả về 0.
Cảm ơn mọi người đã tham gia cùng mình giải quyết các vấn đề. Thống kê lại kết quả của chủ đề này, ta có 2 phương pháp tốt nhất để giải quyết dấu ' trong chuỗi trước khi insert vào CSDL:
Tóm lại:
addslash($a) = str_replace("'", "'", $a)
Và nếu bạn muốn trở thành coder chuyên nghiệp thì cũng phải tuân thủ quy tắc của coder, vì một mình không thể ôm hết project được mà phải cần cả tập thể. Nếu ai cũng làm theo cách riêng thì làm thế nào nó vận hành được đây.
Bản thân mình cũng đang code PHP để mưu sinh, nhưng mình thì luôn đề cao kết quả cho dù để đạt được kết quả đó có thể phải rời xa cách làm truyền thống. Ý kiến của bạn rất phù hợp để coder làm việc nhóm hiệu quả. Tuy nhiên, có lẽ mình sẽ tiếp tục đi theo hướng khác biệt này và hy vọng nó sẽ thành công. Nhóm của mình luôn họp mặt và công bố những gì cần thay đổi trong cách code để project đạt được kết quả như ý nhất mà! ^^
Thông điệp của mình là không có cái gì được tạo ra là không có mục đích, đặc biệt là để đối xử với các giải pháp chung. Sử dụng những cái có sẵn bao giờ cũng tốt hơn cái mà bạn tạo ra (nhiều cái đầu đã lao tâm khổ tứ cho vấn đề đó rồi).
Lập trình viên làm việc sáng tạo, chỉ một phần nhỏ thôi. Phần quan trọng là ... sử dụng đúng giải pháp.
Còn sáng tạo nên để dành cho việc phát triển các tính năng.