javascript - php製作中文驗證碼的文字數組問題

來源:互聯網
上載者:User
關鍵字 php javascript python
在做一個php中文驗證碼時,按原本的思路是將一段文字分割成一個個文字組成個文字數組,然後遍曆四次,隨機產生四個驗證文字,然後畫在image上,可是發現用`str_split($str,3)`來分割有時會少一個文字,換成`explode(" ",$str)`還是偶爾缺字。。。主要代碼如下:` $fontFace='aa.ttf';    $str=" 大 閘 是 中 國 主 導 品 牌 亦 行 業 協 會 重 點 推 薦 家 集 養 殖 與 銷 售";    $strDb=str_split($str,3);for($i=0;$i<4;$i++){    $fontColor=imagecolorallocate($img,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));    $index=mt_rand(0,count($strDb)+1);    $cn=$strDb[$index];    $captcha.=$cn;    $x=($i*120/4)+mt_rand(5,10);    $y=mt_rand(25,45);    imagettftext($img,15,mt_rand(-30,60),$x,$y,$fontColor,$fontFace,$cn);}`感覺是文字編碼的問題,位元組數設為4的時候也可以顯示部分文字,可是具體怎麼解決不知道,求協助,謝謝!

回複內容:

在做一個php中文驗證碼時,按原本的思路是將一段文字分割成一個個文字組成個文字數組,然後遍曆四次,隨機產生四個驗證文字,然後畫在image上,可是發現用`str_split($str,3)`來分割有時會少一個文字,換成`explode(" ",$str)`還是偶爾缺字。。。主要代碼如下:` $fontFace='aa.ttf';    $str=" 大 閘 是 中 國 主 導 品 牌 亦 行 業 協 會 重 點 推 薦 家 集 養 殖 與 銷 售";    $strDb=str_split($str,3);for($i=0;$i<4;$i++){    $fontColor=imagecolorallocate($img,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));    $index=mt_rand(0,count($strDb)+1);    $cn=$strDb[$index];    $captcha.=$cn;    $x=($i*120/4)+mt_rand(5,10);    $y=mt_rand(25,45);    imagettftext($img,15,mt_rand(-30,60),$x,$y,$fontColor,$fontFace,$cn);}`感覺是文字編碼的問題,位元組數設為4的時候也可以顯示部分文字,可是具體怎麼解決不知道,求協助,謝謝!


兩個點,第一個是$str不用空格分開,第二個是產生隨機index的時候,應該是-1,不是+1
像這種取數組中某個隨機值的時候,index可以用array_rand()函數來產生
改完如下

$fontFace='aa.ttf';    $str="大閘是中國主導品牌亦行業協會重點推薦家集養殖與銷售";    $strDb=str_split($str,3);for($i=0;$i<4;$i++){    $fontColor=imagecolorallocate($img,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));    $index=array_rand($strDb);    $cn=$strDb[$index];    $captcha.=$cn;    $x=($i*120/4)+mt_rand(5,10);    $y=mt_rand(25,45);    imagettftext($img,15,mt_rand(-30,60),$x,$y,$fontColor,$fontFace,$cn);}

用mb擴充的函數處理字串,解決編碼問題,另外空格有啥用嗎?

如果$str含中英文用這個分割$strDb=preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.