从后台读取数据时,通常会出现乱码情况,比如“汉字”变成“?”等,造成这种情况的原因通常是编码设置不对,解决方法如下:
第一种方法:在php中添加如下代码,将编码格式设为“utf-8”,代码如下:
header("Content-Type: text/htmlcharset=UTF-8")
第二种方法:在php中添加另外一行代码,同样用来转码,代码如下:
$conn = mysqli_connect($servername, $username, $password, $mysqlname)
$conn->query("SET NAMES utf8")
该种情况是先创建链接,之后再转码。
另外,在使用数据库时,直接手动(非代码)建表,通常会在表中输入汉字时,浏览时无法显示或显示为“?”,造成这种情况的原因也是编码问题,解决方案如下:
在建表或建库时,表和库的编码格式一定要统一,设置成:“utf8_general_ci”,如下图:
代码如下:CREATE PROCEDURE sp_str
(
IN p_str VARCHAR(50), /*原始字符串*/
IN p_begin_str VARCHAR(50), /*要匹配的起始字符串*/
IN p_end_str VARCHAR(50)) /*要匹配的结束字符串*/
OUT p_result VARCHAR(50)) /*返回结果*/
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE m_len INT DEFAULT 0
DECLARE m_index INT DEFAULT 0
/*计算第一个匹配字符串的索引位置*/
select locate(p_begin_str,p_str)+char_length(p_begin_str) into m_index
/*计算第一个匹配字符串的长度*/
select locate(p_end_str,p_str,m_index) into m_len
select SUBSTRING(p_str,m_index,m_len-m_index) INTO p_result
END
执行:
CALL sp_str('[]abcd[12345]aa[]ss','abcd[',']',@result)
返回值 @result 为12345
call sp_str('[]abcd[sdww]aa[]ss','abcd[',']',@result)
返回值 @result 为sdww
如果不用存储过程,可以直接写sql语句实现:
代码如下:
select SUBSTRING(
']abcd[12345]111[]',
locate('abcd[',']abcd[12345]111[]')+CHAR_LENGTH('abcd['),
locate(']',']abcd[12345]111[]',CHAR_LENGTH('abcd['))-
(select locate('abcd[',']abcd[12345]111[]')+CHAR_LENGTH('abcd['))
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)