Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá Pessoal,
Venho aqui pedir ajuda, pois estou a 37 horas quebrando minha cabeça nesse paradigma. :pinch:
Estou usando o curl para obter um dado de outro site (http://rodrigo123.netne.net/) , como é possível ver existe isso escrito naquele site <1teste>Je Crois Que Je l’Aime (2007)<2teste>.
Estou querendo pegar essa informação que esta entre as tags <1teste><2teste> e armazenar no meu banco de dados que está em UTF-8.
Segue o código a baixo para acessar o site e armazenar no database:
<?php
header('Content-Type: text/html; charset=utf-8');
set_time_limit(0);
$conexao=mysql_connect('localhost','root','vertrigo');
$banco= mysql_select_db('teste');
//FIX UTF-8 Works//
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8'); $url="http://rodrigo123.netne.net/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$output = curl_exec($ch);
//pegar só o que está dentro das tags <1teste> e <2teste>
preg_match("/<1teste>(.*?)<2teste>/s", $output, $saida);
if(get_magic_quotes_gpc()){
$saida[1]=stripslashes($saida[1]);
}
$saida[1] = mysql_real_escape_string($saida[1]);
$inserirteste = mysql_query ("INSERT INTO `table_teste` (`teste`) values ('$saida[1]')");
?>
As tabelas no banco de dados estão setadas assim:
CREATE DATABASE teste
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_unicode_ci
DEFAULT COLLATE utf8_unicode_ci
;
USE teste;
CREATE TABLE `table_teste` (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,teste VARCHAR(255) NOT NULLO arquivo php está salvo usando a codificaçao UTF-8 without BOM.
Porém quando tento inserir no banco de dados, o dado é truncado e só armazena isso - "Je Crois Que Je l" pareçe que aquele caracter ’ está truncando o insert.
Alguem sabe como faço para resolver o problema?
Qualquer ajuda é bem vinda, desde já muito obrigado.
Realmente, aquele apóstrofo em Je l’Aime é coisa de outro mundo. Pra falar a verdade, se você for utilizar o apóstrofo do teclado, vai sair outro totalmente diferente. Não sei se utilizando alguma função de conversão de caracter, como utf8_decode() ou utf8_encode() pode resolver. Talvez até mysql_real_scape_string(), mas se você diz que está salvando no banco, só que truncado o problema talvez não esteja na hora de salvar e sim na hora de obter os dados.
Dê um var_dump em $saida:
var_dump( $saida );
Já teremos um ponto de partida.
Também olhei sua expressão regular e ela está muito gulosa. A lógica parece ter sentido, mas só parece. ER são tão perigosas quanto poderosas. No seu caso, você está pegando TUDO entre <1teste> e <2teste>.
Mas imagine só. Se você tiver algo assim.
<1teste>
texto
texto
texto.......... muito código depois
<1teste>............<2teste>
<2teste>
Agora, em qual dos <1teste> vai "iniciar" a ER e em qual dos dois <2teste> vai "terminar", uma vez que você diz que é para pegar tudo entre ambos, as tags <1teste> e <2teste> estão incluídas nesse "tudo". Isso é só um exemplo para o seu exemplo. Mas caso você pegar uma tag como <p></p>, existem várias repetições dessa tag em qualquer site. É importante que tenha bem explícito o que você quer retornar e como você quer. E evite listas negadas e marcadores gulosos como o caso deste: (.*?)