2017-10-15 111 views
1

我使用下面的meta標籤下面的代碼,它是導致不正確的字符串值,在MySQLPHP的preg_replace非字母數字結果

PHP的preg_replace代碼

$content = $link->getAttribute('content'); 
$content = preg_replace('/[^a-zA-Z\d\s\.]/', '', $content); 

的$內容目錄

FGC ferrocarrils de la generalitat de catalunya tren ferrocarril funicular cremallera aeri telefric teleferic bitllets fgc bitllets integrats bitllets turstics bitllets turistics turisme i muntanya tarifes horaris abonaments pl�nol xarxa planol xarxa lnia barcelonavalls linia barcelonavalles lnia LlobregatAnoia linia LlobregatAnoia Metro del Valls Metro del Valles Metro del Baix Llobregat lnies urbanes bcn linies urbanes bcn lnies suburbanes bcn linies suburbanes bcn barcelonasabadell barcelonaterrassa barcelonaigualada barcelonamanresa barcelonamartorell montserrat nria nuria vall de nria vall de nuria la Molina lleidala pobla gelida olesaesparraguera tren del ciment tren de lensenyament tren de vapor estacions accessibles l6 l7 s1 s2 s5 s55 l8 s33 s4 s8 r5 r6 transporttransport escolar projectes educatius tren de lensenyament programes pedaggics activitats educatives activitats pedaggiques histria fgc trens vapor cremallera funicular locomotora vagons estacions transports mobilitat pblic Rub Martorell Montserrat Vallvidrera Catalunya Turisme Via neu esqu snowboard esports dhivern bicicleta Mountain Bike accessibilitat Transport sostenible PMR Mobilitat reduda 

Meta標籤

<meta name="keywords" content="FGC, ferrocarrils de la generalitat de catalunya, tren, ferrocarril, funicular, cremallera, aeri, telefèric, teleferic, bitllets fgc, bitllets integrats, bitllets turístics, bitllets turistics, turisme i muntanya, tarifes, horaris, abonaments, plànol xarxa, planol xarxa, línia barcelona-vallès, linia barcelona-valles, línia Llobregat-Anoia, linia Llobregat-Anoia, Metro del Vallès, Metro del Valles, Metro del Baix Llobregat, línies urbanes bcn, linies urbanes bcn, línies suburbanes bcn, linies suburbanes bcn, barcelona-sabadell, barcelona-terrassa, barcelona-igualada, barcelona-manresa, barcelona-martorell, montserrat, núria, nuria, vall de núria, vall de nuria, la Molina, lleida-la pobla, gelida, olesa-esparraguera, tren del ciment, tren de l'ensenyament, tren de vapor, estacions accessibles, l6, l7, s1, s2, s5, s55, l8, s33, s4, s8, r5, r6, transport,transport escolar, projectes educatius, tren de l'ensenyament, programes pedagògics, activitats educatives, activitats pedagògiques, història fgc, trens, vapor, cremallera, funicular, locomotora, vagons, estacions, transports, mobilitat, públic, Rubí, Martorell, Montserrat, Vallvidrera, Catalunya, Turisme, Via, neu, esquí, snowboard, esports d'hivern, bicicleta, Mountain Bike, accessibilitat, Transport sostenible, PMR, Mobilitat reduïda"/> 

MySQL錯誤

General error: 1366 Incorrect string value: '\xA0nol x...' for column 'meta_content' at row 1

我使用CakePHP 3.4插入數據,使用下面的行...

$metaEntity = $metaTable->newEntity([ 
        'domains_host_id' => $hostId, 
        'meta_name' => '', 
        'meta_property' => $property, 
        'meta_content' => $content, 
       ]); 
$metaTable->save($metaEntity); 

這裏是我的數據庫的詳細信息...

+------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+ 
| Name     | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time   | Update_time   | Check_time | Collation  | Checksum | Create_options | Comment | 
+------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+ 
| domains_software_metas | InnoDB |  10 | Dynamic | 2677 |   116 |  311296 |    0 |   0 | 2097152 |   2678 | 2017-10-15 10:49:07 | 2017-10-15 11:26:32 | NULL  | utf8_general_ci |  NULL |    |   | 
+------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+ 

關於如何讓preg_replace替換那個討厭的角色的任何想法?

+0

你也可以說也是這樣做的插入行? – AndrewR

+0

提供數據庫信息:MySQL版本,數據庫/表格整理等。 – ishegg

+0

我喜歡轉換爲UTF8的建議,我現在正在研究這個問題,我也在研究如何獲取查詢,brb –

回答

1

我建議你只是將錶轉換爲UTF8,以便您可以支持所有字符。

要回答這個問題,根據$content,pl�nol的輸出,看起來preg_replace正在將字符串處理爲單字節字符。要使其作爲unicode進行處理,請添加u修飾符。

$content = preg_replace('/[^a-zA-Z\d\s\.]/u', '', $content); 

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

0

您的問題肯定是在你的內容串的這部分plànol xarxa

爲何MySQL不能處理這個正確的,我不知道。 PHP的DOM *類希望能夠使用UTF8編碼,但您可能沒有基於錯誤消息中的'\xA0nol x...'文本。

加載HTML時,首先嚐試utf8_decode()。這會將ISO-8859-1轉換爲UTF-8。

$document = new DOMDocument(); 
$html = getHtml(); // load your html code 
$document->loadHTML(utf8_decode($html)); 
$link = findLink($document); // your code to find the link 
$content = $link->getAttribute('content'); 
$content = preg_replace('/[^a-zA-Z\d\s\.]/', '', $content); 
+0

我試過utf8_decode,但它仍然失敗= [ –

相關問題